2017-12-18 289 views
0

我有RecyclerView一個問題,我有RecyclerView其在每一行項radio button和其他一些意見,如何從另一個項目更新recyclerview項目中的數據?

我想究竟是什麼,當RadioButton由用戶籤我想取消其他RadioButton(如果任何東西都會被檢查)。由於它是Recyclerview我不能使用radiogroup。

在適配器onBindViewHolder我寫這篇文章偵聽每個單選按鈕

holder.radioButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      selectedPosition = holder.getAdapterPosition(); 
      Toast.makeText(activity, "section: " + selectedPosition, Toast.LENGTH_SHORT).show(); 
     } 
    }); 

我怎樣才能使一個單選按鈕,選擇取消選中?
換句話說,我如何更新另一個項目視圖偵聽器recyclerview特定項目中的視圖屬性?

+1

看到這樣一個..https://stackoverflow.com/questions/46344032/how-to-select-just-one -radiobutton-with-recyclerview-android/46344598#46344598 –

+0

@Sanjay Majoka哦,你這是我想要的,我試試看,它工作得很好,非常感謝你的幫助:) – Mosa

回答

2

您必須對將selectedItem參考在全球範圍內的適配器,然後更新所有項目時,用戶檢查一個新的單選按鈕。

public class Adapter extends RecyclerView.Adapter<Adapter.ViewHolder> { 
    private int selectedItemPosition = -1; 
} 

,做在你的適配器的onBindViewHolder()方法的東西,

@Override 
public void onBindViewHolder(final Adapter.ViewHolder holder, int position) { 
    holder.radioButton.setChecked(holder.getAdapterPosition()==selectedItemPosition); 
    holder.radioButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      selectedItemPosition = holder.getAdapterPosition(); 
      notifyDataSetChanged(); 
     } 
    }); 
} 
+0

確定greate,它工作正常,但是當我更新所有項目和r ecyclerview有大量的數據會滯後幾秒鐘? – Mosa

+0

recyclerview一次不會更新列表中的所有項目。正如名稱所示,Recyclerview不會呈現甚至在您的列表中繪製儘可能多的項目,它只會重用視圖。每個項目在進入顯示屏時都會更新。所以不必擔心時滯。 – kcg

+0

啊我明白了,謝謝你的解釋和清楚的事情 – Mosa

1

試試這個::

 if (position == selectedPosition) { 
      holder.radioButton.setChecked(true); 
      Toast.makeText(activity, "section: " + selectedPosition, Toast.LENGTH_SHORT).show(); 
     } else { 
      holder.radioButton.setChecked(false); 
     } 

     holder.radioButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       selectedPosition = holder.getAdapterPosition(); 
       notifyDataSetChanged(); 
      } 
     }); 
+0

我在鏈接中找到了我的請求@Sanjay Majoka給了我,但謝謝你,這是另一個很好的答案,它適用於我 – Mosa

相關問題