Android добавить / заменить элементы в RecyclerView
Я знаю, что на эту тему уже есть много тем, но ни одно из данных решений не помогло мне. Я пытаюсь добавить или обновить элементRecyclerView
, Вот мой код до сих пор:
Основная деятельность
private MyListItemAdapter mAdapter;
private RecyclerView recyclerView;
// called on activity create
private void init() {
// initialize activity, load items, etc ...
mAdapter = new MyListItemAdapter(this, items);
recyclerView.setAdapter(mAdapter);
}
// called when I want to replace an item
private void updateItem(final Item newItem, final int pos) {
mAdapter.replaceItem(newItem, pos);
}
MyListItemAdapter
public class MyListItemAdapter extends RecyclerView.Adapter<MyListItemAdapter.MyListItemViewHolder> {
private List<Item> mItems;
public void replaceItem(final Item newItem, final int pos) {
mItems.remove(position);
mItems.add(position, newItem);
notifyItemChanged(position);
notifyDataSetChanged();
}
}
Я пытался внести эти изменения изMainActivity
также, но в каждом случае, когда я пытался, мой список не обновляется. Единственный способ, которым это работало, было, когда я переустанавливал адаптер в recyclerView:
mAdapter.notifyDataSetChanged();
recyclerView.setAdapter(mAdapter);
что, очевидно, плохая идея. (кроме плохих побочных эффектов даже не будет работать, когда я использую ленивую загрузку в своих списках).
Итак, мой вопрос, как я могу сделатьnotifyDataSetChanged()
работать должным образом?
редактировать
Я нашел решение для замены предметов. ПослеmAdapter.replaceItem(newItem, pos);
Мне пришлось позвонитьrecyclerView.removeViewAt(position);
Это работает для замены элемента, но не решает мою проблему, когда я хочу добавить элементы (например, отложенная загрузка) в свой список
edit2
Я нашел рабочее решение для добавления предметов
адаптер:
public void addItem(final Item newItem) {
mItems.add(newItem);
notifyDataSetChanged();
}
Деятельность:
private void addItem(final Item newItem) {
mAdapter.addItem(newItem);
recyclerView.removeViewAt(0); // without this line nothing happens
}
По некоторым причинам это работает (также: это не удаляет представление в позиции 0), но я уверен, что это не правильный способ добавить элементы в recyclerView