如何获取Recyclerview特定Item的ViewHolder

Pol*_*lar 8 java android android-recyclerview

有没有办法ViewHolder仅根据给定位置获取 recyclerview 的特定项目?

就像是getViewHolder(position);

public MyViewHolder getViewHolder(int position){
    MyViewHolder holder = null;
    /**
        Find ViewHolder here...
            If Found initialize the holder..
                holder = ?
    **/
    return holder;
}
Run Code Online (Sandbox Code Playgroud)

这个函数位于我的适配器类中,我正在寻找一种获取ViewHolder项目的方法,以便我可以更改自定义项目的一个视图的值eg. holder.setText("Hello World");,我有库存,我找不到方法为此,我尝试搜索,但没有一个能帮助我。

任何人?

Hen*_*aWD 1

ViewHolder 不是这样工作的。ViewHolder 只是您所做的布局的持有者。ViewHolder 是自动可重用的,所以如果你有 100 个项目,android 将不会创建 100 个 ViewHolders,而只是创建一些在屏幕上可见的 ViewHolders。如果滚动 RecyclerView,不可见项的 ViewHolder 将被重新使用。您只需要更改方法上自动传递的 ViewHolder 上的数据onBindViewHolder

这是例子

@Override
public void onBindViewHolder(final ViewHolder holder, int position) {
    holder.textViewTitle.setText(data.get(position).title);
    holder.textViewContent.setText(data.get(position).content);

    Context context = holder.button.getContext();    
    holder.button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Toast.makeText(context, "you clicked the button!", Toast.LENGTH_SHORT).show();
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

编辑:为了更清楚,您应该做的是更改适配器中的特定数据,例如您可以在适配器中创建一个方法,如下所示

public void changeItem(int position, ItemModel newItemModel){
    mItemModelList.remove(position);
    mItemModelList.add(position, newItemModel);
}
Run Code Online (Sandbox Code Playgroud)

然后调用notifyItemChanged(int position)你的适配器。