更新ViewHolder而不重新填充RecyclerView

时间:2017-01-30 02:17:56

标签: java android firebase android-recyclerview

我正在使用FirebaseRecyclerAdapter动态填充视图,因为数据已添加到Firebase。

但是,我还想修改RecyclerView填充Firebase中数据更改的视图。例如,我在每个填充的视图上都有一个计数器,当人们对该主题进行投票时,我希望计数器增加:

我的想法是为RecyclerView中填充的每个视图设置一个标记,找到获取屏幕上当前视图的方法,然后动态更新这些视图。我有点迷失,我会继续,但这是我的PollHolder:

    public static class PollHolder extends RecyclerView.ViewHolder {

    TextView mPollQuestion;
    TextView mVoteCount;
    ImageView mPollImage;
    View mView;
    String mTag;


    public PollHolder(View itemView) {
        super(itemView);

        mPollQuestion = (TextView) itemView.findViewById(R.id.latest_item_question);
        mPollImage = (ImageView) itemView.findViewById(R.id.pollThumbNailImage);
        mVoteCount = (TextView) itemView.findViewById(R.id.latest_item_poll_count);
        this.mView = itemView;
    }

    public void setVoteCount (String voteCount){
        mVoteCount.setText(voteCount);
    }

    public void setTag(String tag){
        this.mTag = tag;
    }

    public View getViewByTag(String tag){
        return mView;
    }

}

以下是RecyclerView中的观点。我希望右下角的计数器更新,但我再次不想完全重新创建/重新填充RecyclerView

enter image description here

1 个答案:

答案 0 :(得分:1)

当你插入new时获取该行的位置。然后你可以使用

刷新特定的行
notifyItemInserted (int position);

它不会刷新或重新创建RecyclerView中的所有数据,但它会替换列表的数量并刷新特定位置。

数据集中其他现有项目的表示仍然被认为是最新的,并且不会被反弹,尽管它们的位置可能会被更改。

更多详情请参阅RecyclerView.Adapter