Firebase Recycler View Adapter - PullRequest
       0

Firebase Recycler View Adapter

0 голосов
/ 27 мая 2018

У нас есть традиционный ListView, сопряженный с адаптером RecyclerView и классом Model.Когда мы входим в Firebase, мы переходим к ListView, в ListView ничего не загружается.Затем мы возвращаемся к операции входа в систему и повторяем процесс. Затем все данные загружаются из очень простого дочернего узла БД. Список таблиц. Мы устали от Firebase RecyclerAdapter, но, к счастью, у нас неправильный интерфейс или версия.Наш вопрос заключается в том, почему мы должны совершить две поездки в список для загрузки данных?Мы опубликуем код ListView, НЕТ ошибок. Мы попытались поместить код в метод OnStart, не повезло с этим

        db = FirebaseDatabase.getInstance().getReference();
    dbRef = db.child("Table List");

    dbRef.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {

            for (DataSnapshot child : dataSnapshot.getChildren())
                listArrayList.add(child.getValue(String.class));
            sz = listArrayList.size();
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

    sz = listArrayList.size();

    if(sz == 0){
        tvNoData.setVisibility(View.VISIBLE);
        tvNoData.setText("No Quiz's Found\n\nClick On Make New Quiz");

        mRecyclerView = findViewById(R.id.recycleview);
        mRecyclerView.setHasFixedSize(true);

        mLayoutManager = new LinearLayoutManager(this);
        mRecyclerView.setLayoutManager(mLayoutManager);

        mAdapter = new TableTrackerAdapter(this,listArrayList);
        mRecyclerView.setAdapter(mAdapter);
    }

    if(sz > 0){
        tvNoData.setVisibility(View.INVISIBLE);

        mRecyclerView = findViewById(R.id.recycleview);
        mRecyclerView.setHasFixedSize(true);

        mLayoutManager = new LinearLayoutManager(this);
        mRecyclerView.setLayoutManager(mLayoutManager);

        mAdapter = new TableTrackerAdapter(this,listArrayList);
        mRecyclerView.setAdapter(mAdapter);

    }

1 Ответ

0 голосов
/ 27 мая 2018

Причина этого в том, что база данных Firebase асинхронна, иными словами, представление переработчика заполняется пустым массивом до того, как firebase закончит загрузку данных, я сталкивался с подобной проблемой раньше.

Просто переместите все, что зависитна вашем массиве данных в базе данных Firebase, и проблема будет исправлена ​​следующим образом.

public void setupRecyclerView(){

    if(sz == 0){
        tvNoData.setVisibility(View.VISIBLE);
        tvNoData.setText("No Quiz's Found\n\nClick On Make New Quiz");

        mRecyclerView = findViewById(R.id.recycleview);
        mRecyclerView.setHasFixedSize(true);

        mLayoutManager = new LinearLayoutManager(MainActivity.this);
        mRecyclerView.setLayoutManager(mLayoutManager);

        mAdapter = new TableTrackerAdapter(MainActivity.this,listArrayList);
        mRecyclerView.setAdapter(mAdapter);
    }

    if(sz > 0){
        tvNoData.setVisibility(View.INVISIBLE);

        mRecyclerView = findViewById(R.id.recycleview);
        mRecyclerView.setHasFixedSize(true);

        mLayoutManager = new LinearLayoutManager(MainActivity.this);
        mRecyclerView.setLayoutManager(mLayoutManager);

        mAdapter = new TableTrackerAdapter(MainActivity.this,listArrayList);
        mRecyclerView.setAdapter(mAdapter);

    }
}

db = FirebaseDatabase.getInstance().getReference();
dbRef = db.child("Table List");
dbRef.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        if(dataSnapshot != null){
            for (DataSnapshot child : dataSnapshot.getChildren()){
                listArrayList.add(child.getValue(String.class));
            }
        sz = listArrayList.size();
        setupRecyclerView();
        }

    }

    @Override
    public void onCancelled(DatabaseError databaseError) {

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