我在每個View
一個EditText
,並且在onViewRecycled(.)
我與任何用戶輸入更新所述Adapter
的項目。爲了保持滾動Views
的信息的目的。可以/應該RecyclerView.Adapter可以訪問ViewHolders嗎?
但是,我意識到,這個解決方案這是一個有點麻煩檢索已被修改,但沒有回收利用的信息。我通過將每個ViewHolder
在Adapter
一個單獨的列表(在onCreateViewHolder(.)
加),因爲我無法找到一個更簡單的方法來更新屏幕上的Views
解決了這個。
是否有任何理由不這樣做;讓Adapter
直接訪問ViewHolders
?即有沒有更好的方法來調用當前存在的所有Views
函數?
編輯:
public class AdapterRv extends Adapter<AdapterRv.MyViewHolder> {
private List<Item> items;
private List<MyViewHoders> viewHolders;
public AdapterRv(List<Item> inItems) {
...
viewHolders = new ArrayList<>();
}
public class MyViewHolder extends RecyclerView.ViewHolder {
private EditText text;
private Item item;
private MyViewHolder(View inView) {
...
}
public void bindItem(Item inItem) {
...
}
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup inParent, int inViewType) {
...
if (!viewHolders.contains(tmpHolder)) {
viewHolders.add(tmpHolder);
}
...
}
....
@Override
public void onViewRecycled(MyViewHolder inViewHolder) {
saveView(inViewHolder.item, inViewHolder.text.getText().toString());
}
private void saveViews() {
for (MyViewHolder tmpViewHolder : viewHolders) {
saveView(tmpViewHolder.item, tmpViewHolder.text.getText().toString());
}
}
private void saveView(Item inItem, String inNewText) {
if (inItem.getText().equals(inNewText)) {
return;
}
inItem.setText(inNewText);
}
public List<Item> fetchTexts() {
saveViews();
return items;
}
}
你能添加一些代碼,所以它是自我解釋 –
你只需要調用nmAdapter.notifyDataSetChanged();或者@ParthAnjaria說分享一些代碼 – Shailesh
有很多方法可以通知RecyclerView來「刷新」它的視圖 –