2016-12-26 8 views
0

私は複数の項目を持つListViewを持っています。 私は、ユーザがアイテムを投票またはダウンボートできるようにしたい。別のボタンをクリックしたときにボタンを変更します

ユーザーが「upvote」ボタンをクリックすると、緑色に変わり、「downvote」ボタンは通常の状態に戻ります(または変更されません)。

ユーザーが「downvote」ボタンをクリックしたときと同じ原則が適用されます。 「V」は、ボタンそのものであるので、私は美しいNULLポインタを取得する(と私はそれに値する)このコード

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); 
    } 
}); 

を試してみた上で、今から

... 私がどのように表示されません私はこれから出ることができます...

レイアウトは、相対レイアウトの2つのボタンです。

助けていただければ幸いです。 ありがとうございます。

+1

はたぶん、あなただけonClickListenerの外にボタンを初期化している必要があります。次に親ビューは必要ありません。 – creativecreatorormaybenot

+0

@creativecreatorormaybenotはい、これも機能し、各リスナーでボタンが同じであるため、重複した呼び出しを避けることができます。また、私は親のクラスを気にせずにレイアウトを変更することができます。 – Fundhor

答えて

3

onClickvパラメータがそれにアクセスするためにfindViewByIdを呼び出す必要ImageViewではありませんクリックしたビューのインスタンスです。アクセスボタンに

使用v.getParent()両方の親が同じである場合:

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

説明をありがとう、それは問題を完全に解決しました。 – Fundhor

関連する問題