Изменение базы данных Firebase для Recyclerview на основе нажатия кнопки

В моем приложении есть фрагмент. Фрагмент имеет 2 кнопки вверху, а в остальной части есть recyclerview. Скажем, кнопки B1 и B2. Я хочу создать систему, в которой при нажатии кнопки B1 recyclerview будет получать данные на основе некоторой базы данных DB1 из Firebase, а при нажатии кнопки B2 recyclerview будет получать данные на основе некоторой базы данных DB2 из Firebase. То есть есть 2 базы данных, и данные, основанные на двух базах данных, отображаются в одном обзоре повторного использования на основе нажатия кнопки.

Что я сделал, так это то, что есть статическая глобальная строка с именем button_track, которая отслеживает, какая кнопка нажата. Но, похоже, это не работает на recyclerview. Recyclerview просто содержит DB1, которая является базой данных по умолчанию, отображаемой с самого начала. Только когда я перезагружаю страницу в своем телефоне, recyclerview берет базу данных на основе строкового значения.

Соответствующий код выглядит следующим образом:

static String button_track  = "b1";

//other code


//in onViewCreated

b1.setOnClickListener(new View.OnClickListener() {
               @Override
               public void onClick(View v) {

button_track  = "b1";

}

b2.setOnClickListener(new View.OnClickListener() {
               @Override
               public void onClick(View v) {

button_track  = "b2";

}


//in populateviewholder

if (button_track .equals("b1"))
{
//set db1 as the database for the Recyclerview

}

if (button_track .equals("b2"))
{
//set db2 as the database for the Recyclerview

}

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

вы можете добавить 2 прослушивателя к 2 ссылкам DB1 и DB2, чтобы получать данные при запуске приложения (предположим, что данные хранятся в массиве). После этого при каждом изменении базы данных не забывайте вызывать adapter.notifyDataSetChange(), чтобы сообщать адаптеру об обновлении recyclerview.based на основе массива данных.

TaQuangTu 07.04.2019 18:35
0
1
134
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Хорошо, попробуйте получить адаптер просмотра ресайклера с помощью метода getAdapter() в onClick(), а затем просто методом пользователя notifyDataSetChanged().

Например:

b2.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View v) {
               recyclerView.getAdapter().notifyDataSetChanged();
           }

Если это не помогает, попробуйте пользовательский интерфейс.

да. Небольшое изменение, и это действительно помогло. Спасибо!!

Zubayr 07.04.2019 21:21

Другие вопросы по теме