Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/218.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Recyclerview停止加载已加载的项目_Android_Android Recyclerview_Lazy Loading - Fatal编程技术网

Android Recyclerview停止加载已加载的项目

Android Recyclerview停止加载已加载的项目,android,android-recyclerview,lazy-loading,Android,Android Recyclerview,Lazy Loading,在myRecyclerView中,当我向下滚动并再次向上滚动时,我希望停止绑定顶部项目 我试过这个密码 recyclerView.getRecycledViewPool().setMaxRecycledViews(ItemTypeHead1, 0); 但是位置0再次被重新标记。 我之所以要这样做,是因为每个项目的渲染都非常繁重,这会导致滚动延迟。 这是我的父亲 public class HomeSliderListAdapter extends AdvanceRecycleViewAdapte

在my
RecyclerView
中,当我向下滚动并再次向上滚动时,我希望停止绑定顶部项目

我试过这个密码

recyclerView.getRecycledViewPool().setMaxRecycledViews(ItemTypeHead1, 0);
但是位置0再次被重新标记。 我之所以要这样做,是因为每个项目的渲染都非常繁重,这会导致滚动延迟。 这是我的父亲

public class HomeSliderListAdapter extends AdvanceRecycleViewAdapter<HomeSliderListAdapter.Holder, Banner> implements OnRecycleItemClick<Banner> {

public interface CallBack {
    void onClick(Banner Banner);
}

private Context context;
private CallBack callBack;

public HomeSliderListAdapter(Context context, CallBack callBack) {
    this.context = context;
    this.callBack = callBack;
}

@Override
public Holder createDataHolder(ViewGroup parent, int viewType) {
    return new Holder(makeView(parent, R.layout.row_home_one_banner));
}

@Override
public void onBindDataHolder(Holder holder, int position) {
    Banner banner = getItems().get(position);

    EpizodUtil.getPicasso(context)
            .load(EpizodUtil.getConvertedImagePath(banner.getImagePath() + "", Common.ImageSize.s10))
            .networkPolicy(NetworkPolicy.NO_CACHE)
            .into(holder.img_background);

    holder.itemView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if (callBack != null) {
                callBack.onClick(banner);
            }
        }
    });

    holder.txt_title.setText(EpizodUtil.checkNullString(banner.getTitleFa()));
    holder.txt_subtitle.setText(EpizodUtil.checkNullString(banner.getSubtitleFa()));
}
公共类HomeSliderListAdapter扩展了AdvanceRecycleViewAdapter在RecycleItemClick上的实现{
公共接口回调{
void onClick(横幅);
}
私人语境;
私有回调;
公共HomeSliderListAdapter(上下文上下文、回调){
this.context=上下文;
this.callBack=回调;
}
@凌驾
公共持有者createDataHolder(视图组父对象,int-viewType){
返回新的持有者(makeView(父级,右布局,行\主\单条横幅));
}
@凌驾
公共无效onBindDataHolder(Holder Holder,int position){
Banner Banner=getItems().get(位置);
EpizodUtil.getPicasso(上下文)
.load(EpizodUtil.getConvertedImagePath(banner.getImagePath()+“”,Common.ImageSize.s10))
.networkPolicy(networkPolicy.NO\u缓存)
.into(holder.img_背景);
holder.itemView.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
if(回调!=null){
callBack.onClick(banner);
}
}
});
holder.txt_title.setText(EpizodUtil.checkNullString(banner.getTitleFa());
holder.txt_subtitle.setText(EpizodUtil.checkNullString(banner.getSubtitleFa());
}

你不能对回收商说停下来装载来自顶部的新物品

在任何情况下,recycler视图都将调用
onBindViewHolder
,您必须在该函数中设置项目

您可以做的是检测当前加载的项目(由
onBindViewHolder
给出)是来自底部还是顶部

我的意思是:

public class CustomAdapter extends RecyclerView.Adapter<CustomAdapter.ViewHolder>
{
    private int mLowestPosition = -1;

    ...

    public CustomAdapter(...)
    {
         ...
    }

    @Override
    public CustomAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType)
    {
         ...
    }


    @Override
    public void onBindViewHolder(ViewHolder iHolder, int iPosition)
    {

        if (iPosition > mLowestPosition)
        {
             // All item coming from the bottom for their first time will pass here.
             // Bind your view here

             mLowestPosition = iPosition;
        }
    }

}
公共类CustomAdapter扩展了RecyclerView.Adapter { private int mLowestPosition=-1; ... 公共自定义适配器(…) { ... } @凌驾 public CustomAdapter.ViewHolder onCreateViewHolder(视图组父级,int-viewType) { ... } @凌驾 BindViewHolder上的公共无效(ViewHolder iHolder,int iPosition) { 如果(i位置>mLowestPosition) { //所有第一次从底部出来的物品都会经过这里。 //把你的观点固定在这里 mLowestPosition=i位置; } } } 如果要重用在向上滚动时从底部消失的数据,可以通过覆盖
onViewRecycled

资料来源:


为什么要停止使用
RecyclerView
来绑定项目?@rmaalo每个项目的内容都很重,这会导致我的应用程序出现延迟,尤其是在旧设备上。然后减少每个项目的内容。你不应该在适配器中显示你想要的所有内容。如果你使用了一些,请优化你的图像。你能发布你的应用程序的布局吗呃?@rmanalo当然