我有一个包含多个项目的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个按钮。
任何帮助将不胜感激, 谢谢。
答案 0 :(得分:3)
onClick
v
参数是点击后的视图的实例ImageView
,因此无需致电findViewById
即可访问它。
如果父项都相同,则使用v.getParent()
访问按钮:
View parent = (View)v.getParent();
ImageButton buttonUpvote = (ImageButton) parent.findViewById(R.id.buttonUpvote);
...