微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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);例如.这样,当您在屏幕上填充列表时,它将按您想要的顺序排列.

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐