список массивов без данных - PullRequest
0 голосов
/ 25 декабря 2018

Я пытаюсь просмотреть данные из firebase в RecyclerView, но ничего не отображается, и массив данных оказывается пустым вне функции onDataChange

public class UsersView extends Fragment {
        FirebaseDatabase mFirebaseDatabase;
        DatabaseReference myRef;
        static final String TAG = "9469849848347903847";
        ArrayList mUsers;
        private RecyclerView mRecyclerView;
        private RecyclerView.Adapter mAdapter;
        private RecyclerView.LayoutManager mLayoutManager;

        @Nullable
        @Override
        public View onCreateView(@NonNull LayoutInflater inflater, 
@Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
            View rootView = inflater.inflate(R.layout.users_view, 
container, false);
            mFirebaseDatabase = FirebaseDatabase.getInstance();
            myRef = mFirebaseDatabase.getReference("Users");
            mRecyclerView = rootView.findViewById(R.id.recyclerView);
            mRecyclerView.hasFixedSize();
            mLayoutManager = new LinearLayoutManager(getActivity());
            mUsers = new ArrayList();
            myRef.addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot snapshot) {
                    Log.e("Count ", "" + snapshot.getChildrenCount());
                    for (DataSnapshot postSnapshot : 
snapshot.getChildren()) {
                        User user = postSnapshot.getValue(User.class);
                        mUsers.add(user);


                    }
                }

                @Override
                public void onCancelled(DatabaseError databaseError) {
                    Log.e(TAG, "failed");
                }
            });
            Log.i(TAG,String.valueOf(mUsers.isEmpty()));
            mAdapter = new ExampleAdapter(mUsers);
            mRecyclerView.setLayoutManager(mLayoutManager);
            mRecyclerView.setAdapter(mAdapter);


            return rootView;
        }
    }

, но когда я переместил этот код в onDataChange, все работало нормально:

mAdapter = new ExampleAdapter(mUsers);
mRecyclerView.setLayoutManager(mLayoutManager);
mRecyclerView.setAdapter(mAdapter);

1 Ответ

0 голосов
/ 25 декабря 2018

вам просто нужно добавить mAdapter.notifyDataSetChanged(); после mUser.add(user);, и хотя второй метод, который вы использовали, работает нормально, это неправильный способ сделать это, потому что таким образом вы указываете адаптер, устанавливаете менеджер раскладки инастройка адаптера для recyclerView каждый раз, когда изменяются данные в базе данных

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