2014-12-24 73 views
8

在引入RecyclerView(及其強制性ViewHolder模式)之前,我通常使用setOnItemClickListener()將任何點擊事件委託給其相應的Activity/Fragment。 (因爲我主要是看Activity/Fragment的「控制器」對象爲Android開發的時候,這樣的觀點的任何修改應在其完成。)RecyclerView - 我應該在哪裏處理它的點擊事件?

現在,作爲RecyclerView並沒有真正把它的孩子以同樣的方式並且setOnItemClickListener()(或類似的)方法不再適用於它 - 我應該在哪裏處理可能發生的點擊事件?我不知道,但在Adapter處理他們似乎尷尬的我。

我們該怎麼做?

在此先感謝!

+0

使您的自定義ViewHolder實現OnClickListener – pskink

回答

4

爲我們一直這樣做的回收站視圖創建您自己的viewHolder,並在onBindView方法中將點擊偵聽器設置爲您希望執行點擊的視圖。

@Override 
public void onBindViewHolder(final ViewHolder viewHolder, int position) { 
viewHolder.mRelContent.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      // perform ur click here 
     } 
    }); 
} 
+0

我結束了使用您的方法。 Volodymyr的答案非常適合那些不需要處理長時間記者事件的名單,否則就需要做一些嚴肅的調整才能使其工作。你的實現起來要容易得多。謝謝! – ridsatrio

+0

這是一個簡單的解決方案,但是如果您想在代碼中的其他位置重新使用此ViewHolder並提供不同的點擊/觸摸處理程序,則此方法不適用。您需要處理適配器外的事件(或ViewHolder)。 – plopd

+0

我認爲處理這個問題的最好辦法是在活動或片段中 –

3

見雅各RecyclerView.OnItemTouchListenerimplementation。我認爲這是最好的解決方案。

希望它能幫助你。問候。

+0

爲什麼你認爲這種方法比OP接受的答案要好? – veritas

+0

@veritas因爲在接受的答案中,每次綁定視圖持有者時都必須設置點擊偵聽器,在這種情況下,您將RecyclerView的觸摸偵聽器設置在一個地方,就是這樣。就像在ListView上一樣。 –

相關問題