Управление позицией элемента в FirebaseRecyclerAdapter - PullRequest
0 голосов
/ 31 марта 2020

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

ниже код, который я уже пробовал.

  @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 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();
                    convViewHolder.setMessage(data, conv.isSeen());

                    //convViewHolder.setBadge(userBadge);
                    //mBadge.setNumber(mCount++);

                }

                @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) {

                }
            });

        }
    };

    mConvList.setAdapter(firebaseConvAdapter);
    mConvList.scrollToPosition(-1);
    firebaseConvAdapter.notifyDataSetChanged();

1 Ответ

0 голосов
/ 01 апреля 2020

Ваш отправленный код неполный, однако, возможно, вам следует добавить в запрос упорядочение по какому-либо полю, указывающему на то, что это самая последняя запись.

FirebaseRecyclerOptions<User> options =
            new FirebaseRecyclerOptions.Builder<User>()
                    .setQuery(mFirebaseDatabaseHelper.fetchOnlineUsers()
                                    .orderByChild("update_at"),
                            User.class)
                    .build();

mAdapter = new FolderListAdapter(options, mListener, getContext());

Просмотрите следующие примеры: https://www.programcreek.com/java-api-examples/index.php?api=com.firebase.ui.database.FirebaseRecyclerOptions

...