2015-09-17 24 views
2

這是我的代碼
當我向上和向下滾動時,圖像也添加到其他位置,即使在那些位置圖像路徑不存在。假設圖像路徑是在1,2和3的位置,但它也表示在圖像位置4,10,15等
當我在Recyclelerview回滾不能正常工作時滾動向下

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找不到

+0

也許是因爲'imgFile.exists()''回報FALSE',嘗試在其他集團設置的默認圖像。 – Rami

+0

如果沒有圖像路徑,圖像變量包含空白 – tarun

+0

您需要在其他區域重置默認圖像(空白圖像),否則回收機制將重新使用舊圖像。 – Rami

回答

4

您需要重置else區域中的默認圖像,否則回收機制將重新使用舊圖像。

@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" 
     } 
} 
0

因爲你在onBindViewHolder()得到回收利用的意見,ImageView可攜帶從以前的初始化數據,所以你需要明確隱藏/清除ImageView如果有當前項目中沒有數據:

@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 { 
     viewHolder.ivProfile.setVisibility(View.INVISIBLE); 
    } 
} 
+0

當我設置不可見,它工作正常,但我想要的,如果不包含路徑,它應該顯示已設置的默認圖像。 – tarun

+0

感謝它的工作正常。:-)你節省了很多我的時間。而不是隱藏我在其他塊設置默認圖像。其他塊爲我工作。 – tarun

+0

很高興幫助!如果它適合你,請接受答案。 – Egor

0

所有 首先當你在寫內部onBindViewHolder還必須寫在條件替代了你的行動的條件。 如

if(condition){ 
    //Write your code for condition is true 
}else{ 
    //Write your code if condition is false 
} 

你可能不會得到正確的結果只能這樣做...... 因爲第一次在onBindViewHolder使用顯示視圖分配您的資源,第二次是使用緩存...
在我的案例它發生的話,
爲了解決這個問題寫代碼波紋管......

@Override 
public void onBindViewHolder(ViewHolder viewHolder, int pos) { 
//To stop recycle 
holder.setIsRecyclable(false); 

//your code 
........... 

//your conditional work 
if(condition){ 
    //Write your code for condition is true 
}else{ 
    //Write your code if condition is false 
} 
}