java - 在 FirebaseRecyclerAdapter 中操作项目位置
问题描述
我在我的应用程序的片段中使用 FirebaseRecyclerAdapter,其他一切都在工作,但我无法控制片段中项目的定位,因为新内容被添加到片段中的项目我希望项目具有更改移动到顶部,以便用户可以知道发生的更改。
下面是我已经尝试过的代码。
@Override
public void onStart() {
super.onStart();
Query conversationQuery = mConvDatabase.orderByChild("timestamp");
FirebaseRecyclerAdapter<Conv, ConvViewHolder> firebaseConvAdapter = new FirebaseRecyclerAdapter<Conv, ConvViewHolder>(
Conv.class,
R.layout.users_layout,
ConvViewHolder.class,
conversationQuery
) {
@Override
protected void populateViewHolder(final ConvViewHolder convViewHolder, final Conv conv, int i) {
final String list_user_id = getRef(i).getKey();
Query lastMessageQuery = mMessageDatabase.child(list_user_id).limitToLast(1);
lastMessageQuery.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
String data = dataSnapshot.child("message").getValue().toString();
convViewHolder.setMessage(data, conv.isSeen());
//convViewHolder.setBadge(userBadge);
//mBadge.setNumber(mCount++);
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
mUsersDatabase.child(list_user_id).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
final String userName = dataSnapshot.child("name").getValue().toString();
String userThumb = dataSnapshot.child("thumb_image").getValue().toString();
if(dataSnapshot.hasChild("online")) {
String userOnline = dataSnapshot.child("online").getValue().toString();
convViewHolder.setUserOnline(userOnline, getActivity());
}
convViewHolder.setName(userName);
convViewHolder.setUserImage(userThumb, getContext());
convViewHolder.mView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent chatIntent = new Intent(getContext(), ChatActivity.class);
chatIntent.putExtra("user_id", list_user_id);
chatIntent.putExtra("user_name", userName);
startActivity(chatIntent);
}
});
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
};
mConvList.setAdapter(firebaseConvAdapter);
mConvList.scrollToPosition(-1);
firebaseConvAdapter.notifyDataSetChanged();
解决方案
您发送的代码不完整,但是您可能应该在查询中添加某个字段的排序,告诉您女巫是最近的记录。
FirebaseRecyclerOptions<User> options =
new FirebaseRecyclerOptions.Builder<User>()
.setQuery(mFirebaseDatabaseHelper.fetchOnlineUsers()
.orderByChild("update_at"),
User.class)
.build();
mAdapter = new FolderListAdapter(options, mListener, getContext());
推荐阅读
- wordpress - 在 WP_Query 中修改 DATE
- c# - 嵌套对象属性上的 C# OrderBy
- mysql - Merge the values of several rows into a single field
- instagram - Instagram 视频中的 HEVC (x265) 编码?
- android - Gradle Multiproject vs Android 风格
- java - 在 Java 代理 IBM Domino / Lotus 中保持数据库打开
- swift - 在 macOS 的状态栏应用程序上创建一个窗口
- java - SuccessFactors 中是否有任何 API 可以一次性为我提供与所有用户关联的所有角色和组
- php - 使用来自 docker-compose 的 docker 远程解释器在 Intellij 中运行 PHPUnit,预计项目位于“/opt/project”中
- ios - react-native 中的 BottomTabNavigator 上方的白线