TonyWrong
@TonyWrong

Почему не обновляется список RecyclerView?

Застрял на 17 главе книги Android programming (Big nerd ranch). Помогите разобраться, что делаю не так.

Сделал как положено в классе фрагмента детализации интерфейс Callbacks с методом обновления другого фрагмента. В переменную ссылочного типа интерфейса mCallbacks получаю свой HostActivity (с помощью переопределения onAttach()), в котором у меня есть реализация этого метода запускающая обновление RecyclerView.
public void onCrimeUpdated(Crime crime) {
        CrimeListFragment listFragment = (CrimeListFragment)
                getSupportFragmentManager()
                .findFragmentById(R.id.fragment_container);
        listFragment.updateUI();
    }

Но обновление происходит, только после перерисовки всех фрагментов (когда например переворачиваю устройство), хотя в этом задействован тот же самый метод updateUI() который не обновляет список, если вызван из переменной mCallbacks.
public void updateUI() {
        CrimeLab crimeLab = CrimeLab.get(getActivity());
        List<Crime> crimes = crimeLab.getCrimes();
        if (mAdapter == null) {
            mAdapter = new CrimeAdapter(crimes);
            mCrimeRecyclerView.setAdapter(mAdapter);
        } else {
            mAdapter.notifyDataSetChanged();
        }
    }

метод onCrimeUpdated() запускается из фрагмента
private void updateCrime(){
        CrimeLab.get(getActivity()).updateCrime(mCrime);
        mCallbacks.onCrimeUpdated(mCrime);
    }

Собственно обновление данных:
public void updateCrime(Crime crime){
        String uuidString = crime.getId().toString();
        ContentValues values = getContentValues(crime);

        mDatabase.update(CrimeTable.NAME, values,
                CrimeTable.Cols.UUID + " = ?",
                new String[] { uuidString });
    }

please help!
  • Вопрос задан
  • 442 просмотра
Решения вопроса 1
mitaichik
@mitaichik
Вообще, у тебя вопрос с темой не коррелирует.

Я так понял что все коллбэки у тебя работают и вызываются (посмотри дебагингом, если не уверен). Если нет - вот тебе мануал из первых рук - там все элементарно https://developer.android.com/training/basics/frag...

Твой вопрос почему не отобрвжаются изменения.
Так вот. Метод updateUi. Если у тебя адаптера нет (видимо при создании активити, или повороте - то есть еще раз при создании) у тебя берется полученный список обьектов и пихается в адаптер - все норм.

Но если адаптер есть, как уже сказал Денис Загаевский , у тебя ничего не делается. Да, ты сообщил адаптеру что изменил данные, но это не так - ты не передал адаптеру новый список обьектов. Сначала ты должен запихнуть в адаптер новый список, иои модифицировать существующий, а затем уже вызывать notifyDataSetChanged.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы