FirestoreRecyclerAdapter зависит от зарегистрированного слушателя - PullRequest
0 голосов
/ 15 мая 2019

Я использую FirestoreRecyclerAdapter, чтобы показать элементы в RecyclerView. Когда я вызываю adapter.startListening(); в моей активности onStart(), адаптер пуст во время выполнения. Я решил зарегистрировать прослушиватель на тот же запрос, что и для адаптера, и передать список Objects на onBindViewHolder адаптера, и он отлично работает. вот мой адаптер

private void loadList(Query query) {

    recycler.setHasFixedSize(true);
    LinearLayoutManager manager = new LinearLayoutManager(this);
    recycler.setLayoutManager(manager);

    FirestoreRecyclerOptions<Post response = new FirestoreRecyclerOptions.Builder<Post()
            .setQuery(query, Post.class)
            .build();

    adapter = new FirestoreRecyclerAdapter<Post, PostViewHolder(response) {

        @Override
        protected void onBindViewHolder(PostViewHolder holder, int position, Post model) {

            //holder.setData(postList.get(position));

            holder.setData(model);

        }

        @Override
        public PostViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            View view = LayoutInflater.from(parent.getContext())
                    .inflate(R.layout.post_layout, parent, false);

            return new PostViewHolder(view);
        }

        @Override
        public void onError(FirebaseFirestoreException e) {
            Log.e("error", e.getMessage());
        }
    };

    adapter.notifyDataSetChanged();
    recycler.setAdapter(adapter);
}

Мой адаптер всегда пуст без этого зарегистрированного слушателя:

firestoreListener = query
    .addSnapshotListener(new EventListener<QuerySnapshot() {
        @Override
        public void onEvent(QuerySnapshot documentSnapshots, FirebaseFirestoreException e) {
            if (e != null) {
                //Log.e(TAG, "Listen failed!", e);
                return;
            }

            postList = new ArrayList<();

            for (DocumentSnapshot doc : documentSnapshots) {
                Post post = doc.toObject(Post.class);
                postList.add(post);
            }

            adapter.notifyDataSetChanged();
            recycler.setAdapter(adapter);
        }
    });

Это как обычно должно быть сделано? Я думал, что запрос, переданный адаптеру в FirestoreRecyclerOptions, был достаточным, и адаптер собирался начать слушать, когда я позвоню adapter.startListening();

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