我在下面显示的使用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);例如.这样,当您在屏幕上填充列表时,它将按您想要的顺序排列.
还有其他方法涉及制作自定义适配器,但我个人认为这将比这两种方法更复杂.第一个是我最喜欢的.