问题描述
我想从回收站视图中的特定项目中删除 textview。我写了下面的代码来做到这一点
@Override
public void onBindViewHolder(@NonNull final Myholder holder,final int possion) {
final String n = names.get(possion);
if(possion==3){
holder.textView.setVisibility(View.GONE);}}
但这会更改所有项目,我只想让位置编号 3 的项目视图消失。 这是我的观点持有者
public static class Myholder extends RecyclerView.ViewHolder {
TextView textView;
public Myholder(@NonNull View itemView) {
super(itemView);
textView = itemView.findViewById(R.id.textfolder);
}
}
我该怎么办?
解决方法
永远记住 RecyclerView
回收 视图持有者。也就是说,相同的 ViewHolder
实例将被重新用于不同的视图。这意味着使用 if
语句修改视图而没有相应的 else
几乎总是一个坏主意。
所以,试试这个:
if (possion == 3) {
holder.textView.setVisibility(View.GONE);
} else {
holder.textView.setVisibility(View.VISIBLE);
}
另请注意,仅检查 position
参数不一定是个好主意。如果您使用 notifyItemInserted()
或 notifyItemRemoved()
,这可能会导致问题。
最好在该位置设置有关该项目的某些内容以指示不应显示其文本。