Из активити не обновляется RecyclerView во фрагменте

141
21 декабря 2019, 05:10

При нажатии кнопки меню в MainActivity обновляются данные, изпользуемые в RecyclerView. Сам рецайклер сидит во фрагменте, пытаюсь сообщить ему, что данные изменились, примерно так:

Fragment f = getSupportFragmentManager().findFragmentById(R.id.frame_layout);    
RecyclerView rv =(RecyclerView)f.getView().findViewById(R.id.RVNick);    
rv.getAdapter().notifyDataSetChanged();

В результате ничего не меняется. Хотя вызов .notifyDataSetChanged() из самого фрагмента отлично всё обновляет. Пробовал также сделать рецайклер public static и обратиться напрямую, тоже не выходит. Что я делаю не так? Как правильно обновить Recycler? Заранее спасибо за помощь!

Answer 1

Я не совсем представляю как у вас реализован фрагмент и активити. Но допустим у вас есть активити в ней фрагмент не на весь экран, а кнопка находится именно в активити. Вы можете сделать это примерно так.

В адаптере создаете метод

public void replaceItems() {
        notifyDataSetChanged();
    }

После чего так же создаете интерфейс примерно так:

interface IFragmentController {
    void updateAdapter();
}

В активити создаете экземпляр интерфейса:

private IFragmentController mFragmentController;
//some code
yourButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                 mFragmentController = (IFragmentController) getSupportFragmentManager()
            .findFragmentById(R.id.fragment_container); 
                 mFragmentController.updateAdapter();
            }
        });

Далее во фрагменте вам необходимо реализовать этот интерфейс

public class YourFragment extends Fragment implements IFragmentController{
//some code
@Override
    public void updateAdapter() {
        if(adapter!=null){
             adapter.replaceItem();
        }
    }
}
READ ALSO
Вопрос по строковому методу length в java

Вопрос по строковому методу length в java

В примерах кода в своей книге ("Структуры данных и алгоритмы") Лафоре не пользуется методом lengthА отдельно объявляет дину массива, например...

150
Почему android studio подчёркивает переменную?

Почему android studio подчёркивает переменную?

myRad имеет тип floatКто-нибудь знает, что нужно исправить? У меня есть другие переменные float, но они не подчёркнуты

163
Автоматическое приведение типов

Автоматическое приведение типов

Выдержка из пособия по Java:

169