我有一个FirebaseRecyclerAdapter。我想编号项目。 所以如果我有5个项目,比如
1 - d
2 - w
3 - c
4 - s
5 - z
当我在第一位添加新项目时:(我需要这样做)
1 - g
2 - d
3 - w
4 - c
5 - s
6 - z
所以我想在新项目到达时为所有项目添加新的位置编号。所以我想刷新所有位置。 我该怎么办?
// Set up Layout Manager, reverse layout
mManager = new LinearLayoutManager(getActivity());
mManager.setReverseLayout(true);
mManager.setStackFromEnd(true);
mRecycler.setLayoutManager(mManager);
// Set up FirebaseRecyclerAdapter with the Query
Query postsQuery = getQuery(mDatabase);
mAdapter = new FirebaseRecyclerAdapter<Test, PostViewHolder>(Test.class, R.layout.item_record, PostViewHolder.class, postsQuery) {
@Override
protected void populateViewHolder(final PostViewHolder viewHolder, final Test model, final int position) {
viewHolder.bindToPost(model);
}
};
mRecycler.setAdapter(mAdapter);
public class PostViewHolder extends RecyclerView.ViewHolder {
public TextView titleView;
public PostViewHolder(View itemView) {
super(itemView);
titleView = (TextView) itemView.findViewById(R.id.tview);
}
public void bindToPost(Test item) {
titleView.setText(String.valueOf(getLayoutPosition())+". "+item.name);
}
}
当新项目到达时,populateViewHolder会运行1次。但旧物品没有刷新。我怎么能刷新一切?
getLayoutPosition()这样做:
5 - g
4 - d
3 - w
2 - c
1 - s
0 - z
如果创建一个新项目,我该如何刷新所有项目?
答案 0 :(得分:1)
要使适配器刷新其内容,请通知它数据集已更改:
mAdapter.notifyDataSetChanged();
答案 1 :(得分:0)
您没有显示您的查询。它需要定义一个排序顺序,以便在新项到达或更改时,Query可以自动反映这些更改。
由于您希望对某种排名索引进行排序,因此您还需要在数据中添加position
字段,以便查询可以order using that child key。
底线是这样的:如果您的查询定义了排序,并且子项的顺序会随着时间的推移而变化,FirebaseRecyclerAdapter将自动反映这些更改。您只需要确保数据库中的数据是正确的。
如果您无法创建正确排序数据的查询,则可能不应使用FirebaseRecyclerAdapter,而是使用侦听器读取数据,然后手动对代码中的数据进行排序,然后将其发送到自定义适配器显示在RecyclerView中。