单击另一个按钮时修改按钮

时间:2016-12-26 19:29:42

标签: android button onclick onclicklistener

我有一个包含多个项目的ListView。 我希望用户能够投票或投票。

当用户点击“upvote”按钮时,它应该变为绿色,“downvote”按钮应该恢复正常(或保持不变)。

当用户点击“downvote”按钮时,同样的原则适用。

从现在开始,我尝试过这段代码

holder.buttonUpvote.setOnClickListener(new View.OnClickListener() {
  @Override
  public void onClick(View v) {
    ImageButton buttonUpvote = (ImageButton) v.findViewById(R.id.buttonUpvote);
    ImageButton buttonDownvote = (ImageButton) v.findViewById(R.id.buttonDownvote);

    buttonUpvote.setBackgroundColor(v.getResources().getColor(R.color.upvoteColor));
    buttonDownvote.setBackgroundColor(Color.TRANSPARENT);

    Toast.makeText(v.getContext(), "voted UP", Toast.LENGTH_LONG);

  }
});

holder.buttonDownvote.setOnClickListener(new View.OnClickListener() {
  @Override
  public void onClick(View v) {
    ImageButton buttonUpvote = (ImageButton) v.findViewById(R.id.buttonUpvote);
    ImageButton buttonDownvote = (ImageButton) v.findViewById(R.id.buttonDownvote);

    buttonUpvote.setBackgroundColor(Color.TRANSPARENT);
    buttonDownvote.setBackgroundColor(v.getResources().getColor(R.color.downvoteColor));

    Toast.makeText(v.getContext(), "voted DOWN", Toast.LENGTH_LONG);
  }
});

我得到一个漂亮的空指针(我应得的),因为“v”是按钮本身...... 我不明白我怎么能摆脱这个......

布局只是相对布局中的2个按钮。

任何帮助将不胜感激, 谢谢。

1 个答案:

答案 0 :(得分:3)

onClick v参数是点击后的视图的实例ImageView,因此无需致电findViewById即可访问它。

如果父项都相同,则使用v.getParent()访问按钮:

View parent = (View)v.getParent();
ImageButton buttonUpvote = (ImageButton) parent.findViewById(R.id.buttonUpvote);
 ...