Android Recyclerview插入过多数据就会导致item重复,乱序
大家讲道理
大家讲道理 2017-04-17 17:22:11
[Android讨论组]

item数量超过6条就会出现item重复,乱序

代码如下

fragment布局



    

recyclerview item布局




    
        
        

        

    

recycerview adapter

public class LightingRVAdapter extends RecyclerView.Adapter {

    private List mlist;
    private Context mContext;
    private LightingViewHolder viewHolder;

    public LightingRVAdapter(Context mContext, List mlist) {
        this.mContext = mContext;
        this.mlist = mlist;
    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.cardview_lighting, parent, false);
        viewHolder = new LightingViewHolder(v);
        return viewHolder;
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {

        Commodity c = mlist.get(position);
        viewHolder.mImageView.setText(c.getName());
        viewHolder.mTextView.setText(String.valueOf(c.getPrice_discont()));
    }

    @Override
    public int getItemCount() {
        return mlist == null ? 0 : mlist.size();
    }

    private class LightingViewHolder extends RecyclerView.ViewHolder
        implements View.OnClickListener
    {
        public TextView mTextView;

        public TextView mImageView;

        public LightingViewHolder(View v )
        {
            super(v);
            mTextView = (TextView) v.findViewById(R.id.name);
            mImageView = (TextView) v.findViewById(R.id.pic);
            mImageView.setOnClickListener(this);
        }

        @Override
        public void onClick(View view) {
            switch (view.getId()) {
                case R.id.pic :
                    mTextView.setText("OnChlic");
                    break;
            }
        }
    }

}
大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全部回复(3)
怪我咯

不错乱才是怪事,你的view holder用法不对啊..
onCreateViewHolder那里直接创建新的实例返回,这个方法会在需要新的item的时候被调用。
你这样写法,整个adapter中使用的是同一个holder,因为显示有缓存所以不会第二个item就错乱。
OnBind那里会提供你创建的holder实例,在那里操作你的数据。
同时,以上方法的返回类型都应该是你的自定义holder。

PHP中文网

重复乱序是什么意思,是第position 7的位置,显示的数据是之前显示过的?
建议你在onBindViewHolder()方法中debug下,看看相关变量的值。

看代码好像没什么问题。是否有其他的代码,比如你说的“插入”

PHP中文网

这一行是关键啊
这是正确的写法

public class LightingRVAdapter extends RecyclerView.Adapter<LightingRVAdapter.LightingViewHolder> 

改正后实现接口是这样子的

@Override
    public LightingViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.cardview_lighting, parent, false);
        return new LightingViewHolder(v);

    }
@Override
public void onBindViewHolder(final LightingViewHolder holder, int position)

然后直接在onBindViewHolder内操作数据

感谢 原文海 的指正,谢谢

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号