Переместить новый элемент в верхнюю часть окна переработчика с помощью адаптера Firebase - PullRequest
0 голосов
/ 20 апреля 2019

Я использую FirebaseRecyclerAdapter в своем приложении ChatFragment и хочу переместить последние разговоры в верхнюю часть представления (когда пользователь отправляет новое сообщение, оно должно прокручиваться до верхней части), но я действительно не знаю правильного способ сделать это.

это то, что я уже пробовал

 firebaseConvAdapter.registerAdapterDataObserver(new RecyclerView.AdapterDataObserver() {
        @Override
        public void onItemRangeInserted(int positionStart, int itemCount) {
            super.onItemRangeInserted(positionStart, itemCount);

            int chatMessage = firebaseConvAdapter.getItemCount();
            int lastVisiblePosition = linearLayoutManager.findLastCompletelyVisibleItemPosition();

            if (lastVisiblePosition == -1 ||
                    (positionStart >= (chatMessage)&& lastVisiblePosition==(positionStart))){

                mConvList.scrollToPosition(positionStart);

            }
        }
    });
    mConvList.setAdapter(firebaseConvAdapter);

}

но код не работает, когда я его запускаю

это мой ChatFragment

  @Override
public void onStart() {
    super.onStart();

    Query conversationQuery = mConvDatabase.orderByChild("timestamp");


    FirebaseRecyclerAdapter<Conv, ConvViewHolder> firebaseConvAdapter = new FirebaseRecyclerAdapter<Conv, ConvViewHolder>(
            Conv.class,
            R.layout.users_layout,
            ConvViewHolder.class,
            conversationQuery
    ) {
        @Override
        protected void populateViewHolder(final ConvViewHolder convViewHolder, final Conv conv, int i) {


            final String list_user_id = getRef(i).getKey();

           // Query MessageQuery = mMessageDatabase.child(list_user_id);


            Query lastMessageQuery = mMessageDatabase.child(list_user_id).limitToLast(1);

            lastMessageQuery.addChildEventListener(new ChildEventListener() {
                @Override
                public void onChildAdded(DataSnapshot dataSnapshot, String s) {

                    String data = dataSnapshot.child("message").getValue().toString();
                    String type_image = dataSnapshot.child("type").getValue().toString();

                    boolean seen = Boolean.parseBoolean(dataSnapshot.getKey());


                    if (type_image.equals("image")){
                         convViewHolder.setMessage("image",conv.isSeen());
                    }else {

                        convViewHolder.setMessage(data, conv.isSeen());

                }}

                @Override
                public void onChildChanged(DataSnapshot dataSnapshot, String s) {

                }

                @Override
                public void onChildRemoved(DataSnapshot dataSnapshot) {

                }

                @Override
                public void onChildMoved(DataSnapshot dataSnapshot, String s) {

                }

                @Override
                public void onCancelled(DatabaseError databaseError) {

                }
            });

            mUsersDatabase.child(list_user_id).addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {

                    final String userName = dataSnapshot.child("name").getValue().toString();
                    String userThumb = dataSnapshot.child("thumb_image").getValue().toString();

                    if(dataSnapshot.hasChild("online")) {

                        String userOnline = dataSnapshot.child("online").getValue().toString();
                        convViewHolder.setUserOnline(userOnline, getActivity());

                    }

                    convViewHolder.setName(userName);
                    convViewHolder.setUserImage(userThumb, getContext());

                    convViewHolder.mView.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View view) {


                            Intent chatIntent = new Intent(getContext(), ChatActivity.class);
                            chatIntent.putExtra("user_id", list_user_id);
                            chatIntent.putExtra("user_name", userName);
                            startActivity(chatIntent);

                        }
                    }); 

                }

                @Override
                public void onCancelled(DatabaseError databaseError) {

                }
            });

        }
    };

    firebaseConvAdapter.registerAdapterDataObserver(new RecyclerView.AdapterDataObserver() {
        @Override
        public void onItemRangeInserted(int positionStart, int itemCount) {
            super.onItemRangeInserted(positionStart, itemCount);

            int chatMessage = firebaseConvAdapter.getItemCount();
            int lastVisiblePosition = linearLayoutManager.findLastCompletelyVisibleItemPosition();

            if (lastVisiblePosition == -1 ||
                    (positionStart >= (chatMessage)&& lastVisiblePosition==(positionStart))){

                mConvList.scrollToPosition(positionStart);

            }
        }
    });
    mConvList.setAdapter(firebaseConvAdapter);

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