Android FirebaseRecyclerAdapter刷新所有项目

时间:2017-02-05 19:14:20

标签: android firebase firebase-realtime-database

我有一个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

如果创建一个新项目,我该如何刷新所有项目?

2 个答案:

答案 0 :(得分:1)

要使适配器刷新其内容,请通知它数据集已更改:

mAdapter.notifyDataSetChanged();

答案 1 :(得分:0)

您没有显示您的查询。它需要定义一个排序顺序,以便在新项到达或更改时,Query可以自动反映这些更改。

由于您希望对某种排名索引进行排序,因此您还需要在数据中添加position字段,以便查询可以order using that child key

底线是这样的:如果您的查询定义了排序,并且子项的顺序会随着时间的推移而变化,FirebaseRecyclerAdapter将自动反映这些更改。您只需要确保数据库中的数据是正确的。

如果您无法创建正确排序数据的查询,则可能不应使用FirebaseRecyclerAdapter,而是使用侦听器读取数据,然后手动对代码中的数据进行排序,然后将其发送到自定义适配器显示在RecyclerView中。