2016-12-26 68 views
0

我有一个列表视图与多个项目。 我希望用户能够投票或downvote项目。修改一个按钮,当另一个被点击

当用户点击“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

也许你应该刚刚初始化按钮出onClickListener的。那么你不需要父视图。 – creativecreatorormaybenot

+0

@creativecreatorormaybenot是的,它也可以,因为按钮在每个监听器中都是一样的,所以它有避免重复调用的好处。它也允许我改变布局而不打扰父类。 – Fundhor

回答

3

onClickv参数是点击查看的实例,它是ImageView因此不需要拨打findViewById来访问它。

使用v.getParent()访问按钮,如果双方父母一样:

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

谢谢你的解释,它完美地解决了这个问题。 – Fundhor

相关问题