У меня есть EditText
в каждом View
, а также в onViewRecycled(.)
Я обновляю товар в Adapter
любым пользователем. С целью сохранения информации при прокрутке Views
и обратно.Может ли адаптер RecyclerView.Adapter иметь доступ к ViewHolders?
Однако я понял, что с этим решением немного хлопот по извлечению информации, которая была изменена, но не переработана. Я решил это, добавив каждый ViewHolder
в отдельный список в Adapter
(добавлен в onCreateViewHolder(.)
), так как я не смог найти более простой способ обновить Views
на экране.
Есть ли причина не делать этого; пусть Adapter
имеют прямой доступ к ViewHolders
? То есть есть ли лучшие способы вызова функции на всех Views
в настоящее время в наличии?
Edit:
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 «обновить» его виды –