Рисование списка в слушателе Firebase - PullRequest
0 голосов
/ 02 ноября 2018

Итак, у меня есть список, в котором хранятся все открытые игры, в которые люди могут вступить. Этот список обновляется каждый раз, когда кто-то создает игру, и он также используется для рисования некоторых интерфейсов на экране через 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 доступ к адаптеру. Любая помощь?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...