在 Firebase 中对数据进行排序

2024-04-10

我正在使用 Firebase listview,如下所示,它的工作方式就像一个魅力,但问题是它在我的 listview(lv) 末尾显示子项(“Posts”)中最后按下的键,我希望最后按下的键最重要的是显示,或者我是否可以按日期对其进行排序。

    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);

方法一:

除非您创建自己的类来扩展 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));
}

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

方法二:

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Firebase 中对数据进行排序 的相关文章

随机推荐