android – 在Firebase中对数据进行排序

我在下面显示的使用Firebase listview,它的工作方式就像魅力一样,但问题是它在我的listview(lv)末尾显示了孩子的最后一个按键(“帖子”)我希望最后一个按下的键显示在所有之上或如果我可以按日期排序.

    query = ref.child("Posts").orderByKey();
    FirebaseListAdapter<ChatRoomJ> adapter = new FirebaseListAdapter<ChatRoomJ>(
            ChatRoom.this,
            ChatRoomJ.class,
            R.layout.lvchatroom,query
    ) {
        @Override
        protected void populateView(View v, ChatRoomJ model, final int position) {

            final String date = model.getDate();
            final String displayName = model.getDisplayName();

            ((TextView) v.findViewById(R.id.displayname)).setText(displayName);
            ((TextView) v.findViewById(R.id.datel)).setText(date);


            });

        }
    };
    lv.setAdapter(adapter);

最佳答案 方法1:

除非您创建扩展FirebaseListAdapter并覆盖getItem()方法的类,否则无法使用当前代码对数据进行重新排序.这是一种非常简单的方法(由Monet_z_Polski提供).到目前为止,我使用了相同的技巧和完美的结果.

public abstract class ReverseFirebaseListAdapter<T> extends FirebaseListAdapter<T>  {

public ReverseFirebaseListAdapter(Activity activity, Class<T> modelClass, int modelLayout, Query ref) {
    super(activity, modelClass, modelLayout, ref);
}

public ReverseFirebaseListAdapter(Activity activity, Class<T> modelClass, int modelLayout, DatabaseReference ref) {
    super(activity, modelClass, modelLayout, ref);
}

@Override
public T getItem(int position) {
  return super.getItem(getCount() - (position + 1));
}

然后,当您创建适配器时,您将使用新的自定义类来修改发送到列表的每个项目的起始位置.

方法2:

另一种方法是将数据读入您的应用程序(可能是一个ArrayList或类似的东西),并在使用正确排序的数据填充列表之前对客户端上的数据重新排序.这可以像将数据读入ArrayList一样简单,每个项目的起始索引为0.像chatRoomList.add(0,nextChatRoom);例如.这样,当您在屏幕上填充列表时,它将按您想要的顺序排列.

还有其他方法涉及制作自定义适配器,但我个人认为这将比这两种方法更复杂.第一个是我最喜欢的.

点赞