RecyclerView快速滚动条目消失

3
我正在使用GridLayoutManager和recyclerview,当我快速滚动时 enter image description here其中四个可见网格项目之一向下移动(右下方)。
我正在使用此教程实现快速滚动和快速滚动指示器 here

你找到解决方案了吗?我也有一些项目在我快速滑动时消失了。 - Gilad Eshkoli
2个回答

3

我想我已经找到了解决方案。

似乎当回收的视图再次附加到窗口时,它们的状态会更改为“不可见”(我不知道为什么)。我们所要做的就是让它再次可见。

幸运的是,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;
    }
}

希望这能帮助你。

2

每一个if语句都应该有对应的else语句。

例如: 如果您有一个视图在XML文件中默认可见,但是您在代码中更改了其可见性,则必须提供else语句,否则RecyclerView将重用这些视图,并显示具有不同数据的重用视图。

if(somethingIsTrue) {
 view.setVisibility(View.GONE);
} else {
 view.setVisibility(View.VISIBLE);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接