Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/69.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 回收器视图创建重复项目_Android_Duplicates_Android Recyclerview_Recyclerview Layout - Fatal编程技术网

Android 回收器视图创建重复项目

Android 回收器视图创建重复项目,android,duplicates,android-recyclerview,recyclerview-layout,Android,Duplicates,Android Recyclerview,Recyclerview Layout,我正在使用Recycler视图创建项目列表,并且在列表中获得了重复的项目。我已将30个大小的列表传递到Recycler视图适配器中。创建的列表有30个项目,但只有3个唯一的项目,所有其他项目都是3个唯一项目的重复。我找不到那只虫子 public class CollectionAdapter extends RecyclerView.Adapter<CollectionAdapter.CollectionViewHolder> { private List<Collection

我正在使用Recycler视图创建项目列表,并且在列表中获得了重复的项目。我已将30个大小的列表传递到Recycler视图适配器中。创建的列表有30个项目,但只有3个唯一的项目,所有其他项目都是3个唯一项目的重复。我找不到那只虫子

public class CollectionAdapter extends RecyclerView.Adapter<CollectionAdapter.CollectionViewHolder> {
private List<CollectionDataTypeModel> mDataSet = new ArrayList<CollectionDataTypeModel>();
private Activity mActivity;
private String mType;


public CollectionAdapter(List<CollectionDataTypeModel> mDataSet, Activity activity, String type) {
    this.mActivity = activity;
    this.mDataSet = mDataSet;
    this.mType = type;

}

@Override
public CollectionViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

    View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.collection_cardview_layout, parent, false);
    CollectionViewHolder vh = new CollectionViewHolder(v);
    return vh;
}

@Override
public void onBindViewHolder(final CollectionViewHolder holder, int position) {


    final CollectionDataTypeModel collectionData = mDataSet.get(position);
    Log.d("Colelction Adapter","name : "+collectionData.getCollectionName());
    holder.titleText.setText(collectionData.getCollectionName()+"");
    holder.secondaryText.setText(collectionData.getPoiCount()+" attractions");
    if (mType.equalsIgnoreCase("Collection")) {
        Glide.with(mActivity).load(R.drawable.aman).asBitmap().centerCrop().into(new BitmapImageViewTarget(holder.profileImage) {
            @Override
            protected void setResource(Bitmap resource) {
                RoundedBitmapDrawable circularBitmapDrawable = RoundedBitmapDrawableFactory.create(mActivity.getResources(), resource);
                circularBitmapDrawable.setCircular(true);
                holder.profileImage.setImageDrawable(circularBitmapDrawable);
            }
        });
    } else if (mType.equalsIgnoreCase("Destination")) {
        holder.profileImageRipple.setVisibility(View.GONE);
    } else if (mType.equalsIgnoreCase("Download")) {
        holder.profileImageRipple.setVisibility(View.GONE);
        holder.viewIcon.setImageResource(R.drawable.clear_icon);
        holder.viewCount.setVisibility(View.INVISIBLE);
    }
     //    holder.collectionImage.setImageResource(R.drawable.goldentemple);
        Glide.with(mActivity).load(collectionData.getCollectionImage()).into(holder.collectionImage);

    holder.likeCount.setText(Integer.toString(collectionData.getLikeCount()));
    holder.viewCount.setText(Integer.toString(collectionData.getViewCount()));

    holder.likeIconRipple.setOnRippleCompleteListener(new RippleView.OnRippleCompleteListener() {
        @Override
        public void onComplete(RippleView rippleView) {
           // if(holder.likeIcon.getDrawable()==mActivity.getDrawable(R.drawable.like_icon))
           {
                holder.likeIcon.setImageResource(R.drawable.like_fill_icon);
            }
           // else
            {
             //   holder.likeIcon.setImageResource(R.drawable.like_icon);
            }
        }
    });
    holder.collectionImageRipple.setOnRippleCompleteListener(new RippleView.OnRippleCompleteListener() {
        @Override
        public void onComplete(RippleView rippleView) {
            EventBus.getDefault().post(new CollectionMessageEvent(collectionData));
        }
    });


}

@Override
public int getItemCount() {
    return mDataSet.size();
}

@Override
public long getItemId(int position) {
    return super.getItemId(position);
}

public static class CollectionViewHolder extends RecyclerView.ViewHolder {
    TextView titleText;
    ImageView collectionImage;
    TextView secondaryText;
    TextView likeCount;
    TextView viewCount;
    ImageView profileImage;
    ImageView viewIcon;
    RippleView collectionImageRipple;
    RippleView profileImageRipple;
    RippleView likeIconRipple;
    ImageView likeIcon;


    public CollectionViewHolder(View itemView) {
        super(itemView);
        // View bottombar =  findById(itemView,R.id.bottomBar);

        collectionImage = findById(itemView, R.id.collection_image);
        collectionImageRipple = findById(itemView, R.id.collection_image_ripple);
        profileImage = findById(itemView, R.id.profileimage);
        profileImageRipple = findById(itemView, R.id.profileimage_ripple);
        titleText = findById(itemView, R.id.title_text);
        secondaryText = findById(itemView, R.id.secondary_text);
        likeCount = findById(itemView, R.id.like_count);
        likeIcon = findById(itemView, R.id.like_icon);
        likeIconRipple = findById(itemView, R.id.like_icon_ripple);
        viewCount = findById(itemView, R.id.view_count);
        viewIcon = findById(itemView, R.id.view_icon);
    }


}


}
公共类CollectionAdapter扩展了RecyclerView.Adapter{
private List mDataSet=new ArrayList();
私人活动能力;
私有字符串mType;
公共CollectionAdapter(列表数据集、活动活动、字符串类型){
这个。活动=活动;
this.mDataSet=mDataSet;
this.mType=type;
}
@凌驾
public CollectionViewHolder onCreateViewHolder(视图组父级,int-viewType){
视图v=LayoutInflater.from(parent.getContext()).flate(R.layout.collection\u cardwiew\u layout,parent,false);
CollectionViewHolder vh=新的CollectionViewHolder(v);
返回vh;
}
@凌驾
BindViewHolder上的公共无效(最终集合ViewHolder,内部位置){
最终收集数据类型模型收集数据=mDataSet.get(位置);
Log.d(“collectionadapter”,“name:+collectionData.getCollectionName());
holder.titleText.setText(collectionData.getCollectionName()+);
holder.secondaryText.setText(collectionData.getPoiCount()+“吸引物”);
if(mType.equalsIgnoreCase(“集合”)){
Glide.with(mActivity).load(R.drawable.aman).asBitmap().centerCrop().into(新的BitmapImageViewTarget(holder.profileImage)中{
@凌驾
受保护的无效集合资源(位图资源){
RoundedBitmapDrawable circularBitmapDrawable=RoundedBitmapDrawableFactory.create(mActivity.getResources(),resource);
circularBitmapDrawable.setCircular(true);
holder.profileImage.setImageDrawable(可循环绘制);
}
});
}else if(mType.equalsIgnoreCase(“目的地”)){
holder.profileImageRipple.setVisibility(View.GONE);
}else if(mType.equalsIgnoreCase(“下载”)){
holder.profileImageRipple.setVisibility(View.GONE);
holder.viewIcon.setImageResource(R.drawable.clear_图标);
holder.viewCount.setVisibility(View.INVISIBLE);
}
//holder.collectionImage.setImageResource(R.drawable.goldentemple);
将(collectionData.getCollectionImage())加载到(holder.collectionImage)中;
holder.likeCount.setText(Integer.toString(collectionData.getLikeCount());
holder.viewCount.setText(Integer.toString(collectionData.getViewCount());
holder.likeIconRipple.setOnRippleCompleteListener(新的RippleView.OnRippleCompleteListener(){
@凌驾
未完成的公共空白(RippleView RippleView){
//if(holder.likeIcon.getDrawable()==mActivity.getDrawable(R.drawable.like_图标))
{
holder.likeIcon.setImageResource(R.drawable.like_fill_图标);
}
//否则
{
//holder.likeIcon.setImageResource(R.drawable.like_图标);
}
}
});
holder.collectionImageRipple.setOnRippleCompleteListener(新的RippleView.OnRippleCompleteListener(){
@凌驾
未完成的公共空白(RippleView RippleView){
EventBus.getDefault().post(新的CollectionMessageEvent(collectionData));
}
});
}
@凌驾
public int getItemCount(){
返回mDataSet.size();
}
@凌驾
公共长getItemId(int位置){
返回super.getItemId(位置);
}
公共静态类CollectionViewHolder扩展了RecyclerView.ViewHolder{
文本视图标题文本;
图像视图采集图像;
文本视图第二文本;
TextView-likeCount;
文本视图视图视图计数;
图像视图轮廓图像;
图像视图图标;
RippleView collectionImageRipple;
RippleView profileImageRipple;
RippleView LikeConRipple;
ImageView-likeIcon;
公共集合视图持有者(视图项视图){
超级(项目视图);
//视图底部栏=findById(itemView,R.id.bottombar);
collectionImage=findById(itemView,R.id.collection\u image);
collectionImageRipple=findById(项目视图,R.id.collection\u image\u ripple);
profileImage=findById(itemView,R.id.profileImage);
profileImageRipple=findById(项目视图,R.id.profileimage_ripple);
titleText=findById(项目视图,R.id.title\u文本);
secondaryText=findById(itemView,R.id.secondary_text);
likeCount=findById(itemView,R.id.like_count);
likeIcon=findById(项目视图,R.id.like_图标);
likeIconRipple=findById(项目视图,R.id.like_图标_ripple);
viewCount=findById(itemView,R.id.view\u count);
viewIcon=findById(项目视图,R.id.view\u图标);
}
}
}

实际上,在这个问题上为您提供帮助并不重要。我的建议是,在进程上附加一个调试器,并检查传递给适配器构造函数的列表的MemoryAddress。您可能正在适配器范围之外的列表上做一些工作,但只要它们指向相同的内存地址,它们也会被修改。我没有对适配器构造函数中传递的列表进行任何处理。适配器的OnBindViewHolder方法只调用了三次而不是30次,在这个方法中,我检查了列表大小,它是30。目前我从json,然后解析为ItemModel的类对象。当我使用静态json时,我当时放在资产文件夹中,没有重复问题,但当我从网络获取json时,它开始创建重复。我不这样认为,由于静态json或从网络获取,它没有任何影响。问题已经解决,这是由于在recycler视图中使用了setHasStableId(true)。