RecyclerView не обновляется - PullRequest
       0

RecyclerView не обновляется

0 голосов
/ 27 февраля 2020

Проблема в том, что мой RecyclerView не обновляется, пока я не установлю новый адаптер. Вот код:

    TransferLab transferLab = TransferLab.get(getActivity());
    List<Transfer> transfers = transferLab.getTransfers();

    if (mAdapter == null) {
        mAdapter = new TransferAdapter(transfers);
        mTransferRecyclerView.setAdapter(new TransferAdapter(transfers));
    } else {
        mAdapter.setTransfers(transfers);
        mAdapter.notifyDataSetChanged();
    }

Как видите, я получаю новый список и передаю его в адаптер. Но RecyclerView не изменится, пока я не перезапущу приложение или не заменю IF-секцию с кодом ниже:

        mAdapter = new TransferAdapter(transfers);
        mTransferRecyclerView.setAdapter(new TransferAdapter(transfers));

Внутри адаптера:

    private class TransferAdapter extends RecyclerView.Adapter<TransferViewHolder> {

    private List<Transfer> mTransfers;


    public TransferAdapter(List<Transfer> transfers) {
        mTransfers = transferList;
    }

    public void setTransfers(List<Transfer> transfers) {
        mTransfers = transfers;
    }

    @NonNull
    @Override
    public TransferViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        LayoutInflater inflater = LayoutInflater.from(getActivity());
        return new TransferViewHolder(inflater, parent);
    }

    @Override
    public void onBindViewHolder(@NonNull TransferViewHolder holder, int position) {
        holder.bind(mTransfers.get(position));
    }

    @Override
    public int getItemCount() {
        return mTransfers.size();
    }

}

Ответы [ 2 ]

1 голос
/ 27 февраля 2020

Вы не устанавливаете mAdapter на mTransferRecyclerView, а скорее создаете новый экземпляр TransferAdapter и устанавливаете его вместо этого. В результате, mAdapter не настроен ни на один RecyclerView, и его обновление ничего не делает.

Измените эту часть кода:

mTransferRecyclerView.setAdapter(new TransferAdapter(transfers));

на

mTransferRecyclerView.setAdapter(mAdapter);

PS Я бы действительно предложил вам удалить List<Transfer> transfers из конструктора вашего класса TransferAdapter и инициализировать ваше поле private List<Transfer> mTransfers; пустым списком. Затем после надувания представлений создайте экземпляр адаптера и немедленно установите для него RecyclerView. Когда данные будут готовы позже, вы можете вызвать метод setTransfers и уведомить адаптер.

0 голосов
/ 27 февраля 2020

Я думаю, что это должно быть реализовано таким образом

public void setTransfers(List<Transfer> transfers) {
            mTransfers.clear() //clear the old data
            Collections.copy(mTransfers, transfers) //copy the new data to old empty list
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...