3

我正在将 GridLayoutManager 与 recyclerview 一起使用,当我快速在此处输入图像描述向下滚动四个可见网格项中的一项时(右下角)进一步向下移动,

我正在使用本教程在这里实现快速滚动和快速滚动指示器

4

2 回答 2

3

猜猜我找到了解决方案。

看起来当回收视图再次附加到窗口时,它们的状态更改为不可见(IDK 为什么)。我们所要做的就是让它再次可见。

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

希望这可以帮助你。

于 2016-07-08T03:15:00.190 回答
2

每一个都if应该有else

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

if(somethingIsTrue) {
 view.setVisibility(View.GONE);
} else {
 view.setVisibility(View.VISIBLE);
}
于 2017-05-04T14:52:20.513 回答