В моем приложении есть фрагмент. Фрагмент имеет 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
}
Я предполагаю, что мне нужно установить прослушиватель, который может отслеживать в реальном времени, когда происходит изменение нажатия кнопки, и, следовательно, он может изменить используемую базу данных. Но в настоящее время я понятия не имею, как это сделать.
Хорошо, попробуйте получить адаптер просмотра ресайклера с помощью метода getAdapter() в onClick(), а затем просто методом пользователя notifyDataSetChanged().
Например:
b2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
recyclerView.getAdapter().notifyDataSetChanged();
}
Если это не помогает, попробуйте пользовательский интерфейс.
да. Небольшое изменение, и это действительно помогло. Спасибо!!
вы можете добавить 2 прослушивателя к 2 ссылкам DB1 и DB2, чтобы получать данные при запуске приложения (предположим, что данные хранятся в массиве). После этого при каждом изменении базы данных не забывайте вызывать adapter.notifyDataSetChange(), чтобы сообщать адаптеру об обновлении recyclerview.based на основе массива данных.