2016-12-26 112 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

相關問題