Итак, у меня есть список, в котором хранятся все открытые игры, в которые люди могут вступить. Этот список обновляется каждый раз, когда кто-то создает игру, и он также используется для рисования некоторых интерфейсов на экране через RecyclerView.
Сейчас у меня есть переменная List, настроенная через Callback, как это.
public interface ListCallback {
void onCallback(List<String> value);
}
public void updateUI(final ListCallback callBack) {
FCGames.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
numGames = (int) dataSnapshot.getChildrenCount();
ArrayList<String> openGames = new ArrayList<>();
for(DataSnapshot ds : dataSnapshot.getChildren()) {
gm = ds.getValue(GameMaker.class);
openGames.add(gm.getUser1().getUserName());
}
callBack.onCallback(openGames);
Toast.makeText(FlipCoinLobby.this, "This happened", Toast.LENGTH_SHORT).show();
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
Таким образом, метод ListCallback создает интерфейс, а затем updateUI используется для добавления объектов в список всякий раз, когда кто-то создает игру, и вызывает openGames для обновления списка.
У меня есть этот слушатель для обновления экрана, чтобы он мог мгновенно нарисовать новый интерфейс
FCGames.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
updateUI(new ListCallback() {
@Override
public void onCallback(List<String> value) {
adapter.notifyDataSetChanged();
}
});
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
Но у меня также есть мой адаптер для MyRecyclerView, определенный в верхней части моего класса в методе onCreate.
final RecyclerView recyclerView = findViewById(R.id.rvfcGames);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
adapter = new MyRecyclerViewAdapter(this, openGames);
adapter.setClickListener(this);
recyclerView.setAdapter(adapter);
Но эта строка:
adapter = new MyRecyclerViewAdapter(this, openGames);
Невозможно получить доступ к openGames, поэтому он не может правильно создать адаптер.
Как я могу разрешить этой линии доступ к openGames? Я попытался переместить его в мой метод «updateUI», но это только проблемы с MyRecyclerClass доступ к адаптеру. Любая помощь?