首页 > 解决方案 > 在 FirebaseRecyclerAdapter 中操作项目位置

问题描述

我在我的应用程序的片段中使用 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();

标签: javaandroidfirebaseandroid-recyclerviewadapter

解决方案


您发送的代码不完整,但是您可能应该在查询中添加某个字段的排序,告诉您女巫是最近的记录。

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


推荐阅读