我想我已经找到了解决方案。
似乎当回收的视图再次附加到窗口时,它们的状态会更改为“不可见”(我不知道为什么)。我们所要做的就是让它再次可见。
幸运的是,RecyclerView.Adapter类有一个处理视图附加或重新附加到RecyclerView的方法。
@Override
public void onViewAttachedToWindow(ViewHolder holder){
super.onViewAttachedToWindow(holder);
if(!holder.tv_1.getText().toString().contentEquals("#EMPTYVIEW"))
holder.root.setVisibility(View.VISIBLE);
Log.i("ATTACHED_VISIBILITY",holder.tv_1.getText().toString()+"\t"+holder.root.getVisibility());
}
我的ViewHolder类
class ViewHolder extends RecyclerView.ViewHolder{
TextView tv_1;
TextView tv_2;
ImageView iv;
ImageButton bt;
View root;
ViewHolder(View v){
super(v);
//setIsRecyclable(false); //to prevent views from getting deleted. :-(
tv_1=(TextView)v.findViewById(R.id.aral_tv_title);
tv_2=(TextView)v.findViewById(R.id.aral_tv_stitle);
iv=(ImageView)v.findViewById(R.id.aral_iv);
bt=(ImageButton)v.findViewById(R.id.aral_bt_more);
tv_1.setTypeface(WorkActivity.mainTF);
tv_2.setTypeface(WorkActivity.mainTF);
root=v;
}
}
每一个if
语句都应该有对应的else
语句。
例如:
如果您有一个视图在XML文件中默认可见,但是您在代码中更改了其可见性,则必须提供else
语句,否则RecyclerView将重用这些视图,并显示具有不同数据的重用视图。
if(somethingIsTrue) {
view.setVisibility(View.GONE);
} else {
view.setVisibility(View.VISIBLE);
}