我正在开发一个Android聊天应用程序,我需要通过时间戳订购会话详细信息。我的firebase数据结构如下所述。
我尝试了以下方法。
接近A
定义DatabaseReference
DatabaseReference conversationReference = mFirebaseDatabaseReference
.child(USERS).child(mFirebaseUser.getUid()).child(CONV_DETAILS).orderByChild("last_time_stamp").getRef();
定义FirebaseRecycler适配器
mFirebaseAdapter = new FirebaseRecyclerAdapter<ConversationDetails,
ConversationsViewHolder>(
ConversationDetails.class,
R.layout.conversation_list_item,
ConversationsViewHolder.class, conversationReference) {
@Override
protected void populateViewHolder(ConversationsViewHolder viewHolder,
final ConversationDetails conversationDetails, int position) {
}
};
方法B:
在字段名称前添加减号
conversationReference = mFirebaseDatabaseReference
.child(USERS).child(mFirebaseUser.getUid()).child(CONV_DETAILS).orderByChild("-last_time_stamp").getRef();
这两种情况都不起作用,只按照存储在firebase数据库中的数组顺序显示。但是,我需要首先显示last_time_stamp
值较高的会话详细信息。
请有人帮我找到解决方案。
答案 0 :(得分:5)
使用Query查询数据并执行orderByValue()
。这总是按升序提供数据。因此,您可以撤消数据,也可以翻转Recycler
视图以显示最新的聊天内容。
不要忘记添加限制。使用限制从升序列表中获取最后一项。
Query chatQuery = conversationReference.orderByChild("last_time_stamp"). limitToLast(20);
这将按升序时间戳为您提供20个最新的聊天记录。现在翻转此列表并使用它。
或者您始终可以在回收站视图中将reverseLayout
设置为true
。
同时将setStackFromEnd
添加到true
。
答案 1 :(得分:0)
只需在firebase回收器适配器中添加它 -
@Override
public ModelClass getItem(int position) {
return super.getItem(getItemCount() - 1 - position);
}