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");
,我有库存,我找不到方法为此,我尝试搜索,但没有一个能帮助我。
任何人?
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)
你的适配器。