gpt4 book ai didi

android - 在 Firebase 中排序数据

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:14:09 25 4
gpt4 key购买 nike

我在下面显示的位置使用 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);

最佳答案

方法一:

除非您创建自己的类来扩展 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);。这样,当您在屏幕上填充列表时,它将按照您想要的顺序排列。

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

关于android - 在 Firebase 中排序数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39885657/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com