Добавить новый элемент сверху на RecyclerView - PullRequest
0 голосов
/ 27 июня 2018

Я добавил функцию комментирования в своем блоге. Я получил комментарии от RecyclerView и сделал orderBy("timestamp"), так как новые комментарии показывают верх.

Я использую Firebase Firestore, после получения всех комментариев. Когда пользователь публикует новые комментарии, я хочу, чтобы комментарий показывался сверху . но, как правило, комментарий добавляет нижнюю часть списка, так что в основном он отображается внизу окна повторного просмотра.

Я использовал приведенный ниже код, чтобы показать новый комментарий вверху Но, к сожалению, все комментарии переходят к выражению Else вместо нового комментария:

if (isFirstLoad) {
    userList.add(userInfo);
    commentList.add(commentInfo);
}else{
    userList.add(0, userInfo);
    commentList.add(0, commentInfo);
}

Весь код для получения комментариев:

Query query = db.collection("BlogPosts/" + postId + "/Comments").orderBy("timestamp", Query.Direction.DESCENDING);
query.addSnapshotListener(new EventListener<QuerySnapshot>() {
    @Override
    public void onEvent(@Nullable QuerySnapshot queryDocumentSnapshots, @Nullable FirebaseFirestoreException e) {

        if (queryDocumentSnapshots!=null && !queryDocumentSnapshots.isEmpty()){

            for (DocumentChange doc: queryDocumentSnapshots.getDocumentChanges()){
                if (doc.getType() == DocumentChange.Type.ADDED){

                    final BlogCommentInfo commentInfo = doc.getDocument().toObject(BlogCommentInfo.class);

                    String BlogUserId = doc.getDocument().getString("user_id");
                    db.collection("Users").document(BlogUserId).get().addOnCompleteListener(CommentActivity.this, new OnCompleteListener<DocumentSnapshot>() {
                        @Override
                        public void onComplete(@NonNull Task<DocumentSnapshot> task) {

                            if (task.isSuccessful()){

                                UsersInfo userInfo = task.getResult().toObject(UsersInfo.class);

                                if (isFirstLoad) {
                                    userList.add(userInfo);
                                    commentList.add(commentInfo);
                                }else{
                                    userList.add(0, userInfo);
                                    commentList.add(0, commentInfo);
                                }
                                adapter.notifyDataSetChanged();

                            }else{
                                Toast.makeText(CommentActivity.this, "Error: "+task.getException(), Toast.LENGTH_LONG).show();
                            }
                        }
                    });


                }
            }

        }
        isFirstLoad = false;
    }
});

Пожалуйста, помогите мне решить эту проблему.

Или Дайте мне знать, если у вас есть какой-либо другой способ показать более новый комментарий в верхней части recyclerview.

1 Ответ

0 голосов
/ 27 июня 2018

Просто нажмите запрос для отметки времени в порядке ACCENDING:

изменить ваш запрос с -

Query query = db.collection ("BlogPosts /" + postId + "/Comments").orderBy("timestamp", Query.Direction.DESCENDING);

TO-

Query query = db.collection ("BlogPosts /" + postId + "/Comments").orderBy("timestamp", Query.Direction.ASCENDING);

Или отменить свой комментарийList

...