+-
android-当我在Recyclerview中向下滚动时,回收无法正常工作
这是我的代码
当我上下滚动时,图像也添加到其他位置,即使在那些位置,图像路径也不存在.假设图像路径位于1,2和3位置,但它也显示图像位于4,10,15位置等

public class Contact_Adapter_RecyeckView extends
RecyclerView.Adapter<Contact_Adapter_RecyeckView.ViewHolder> {
private ArrayList<ContactBean> arraylist;
private Context context;

public Contact_Adapter_RecyeckView(Context context,
        ArrayList<ContactBean> arrayListImages) {
    this.arraylist = arrayListImages;
    this.context = context;
}

// Create new views (invoked by the layout manager)
@Override
public Contact_Adapter_RecyeckView.ViewHolder onCreateViewHolder(
        ViewGroup parent, int viewType) {
    // create a new view
    View itemLayoutView = LayoutInflater.from(parent.getContext()).inflate(
            R.layout.contact_adapter_recycleview, null);

    // create ViewHolder

    ViewHolder viewHolder = new ViewHolder(itemLayoutView);
    return viewHolder;
}

// Replace the contents of a view (invoked by the layout manager)
@Override
public void onBindViewHolder(ViewHolder viewHolder, int pos) {

    String image = arraylist.get(pos).getImage();

         File imgFile = new  File(image);
            if(imgFile.exists())
            {

                viewHolder.ivProfile.setImageURI(Uri.fromFile(imgFile));

            }


        //viewHolder.ivProfile.setImageBitmap(BitmapFactory.decodeFile(arraylist.get(pos).getImage()));
        //viewHolder.ivProfile.setVisibility(View.VISIBLE); 

// inner class to hold a reference to each item of RecyclerView
public static class ViewHolder extends RecyclerView.ViewHolder {

    public ImageView ivProfile;
    public View view;
    public CardView cardview;

    public ViewHolder(View itemLayoutView) {
        super(itemLayoutView);

        ivProfile = (ImageView) itemLayoutView
                .findViewById(R.id.iv_user_profile);


    }
}

// Return the size of your itemsData (invoked by the layout manager)
@Override
public int getItemCount() {
    return arraylist.size();
}}    

我也看到过此链接,但仍然存在相同问题scroll when change找不到

最佳答案
您需要在else bloc中重置默认图像,否则回收机制将重新使用旧图像.

@Override
public void onBindViewHolder(ViewHolder viewHolder, int pos) {

    String image = arraylist.get(pos).getImage();
    File imgFile = new  File(image);
       if(imgFile.exists()){
          viewHolder.ivProfile.setImageURI(Uri.fromFile(imgFile));
       } else {
         // here you set your default image, or you can just hide "viewHolder.ivProfile"
       }
}
点击查看更多相关文章

转载注明原文:android-当我在Recyclerview中向下滚动时,回收无法正常工作 - 乐贴网