2015-07-13 55 views
0

我想爲7th, 14th, 21th位置添加新的imageview項目。在Android中滾動時出現第二種類型的項目,不同項目列表視圖示例

當我添加新項目併爲其創建新的佈局類型時,它不能很好地工作。

當滾動批次imageview(類型2)項目出現在不同的位置。

我該如何解決這個問題,是我的錯誤?

(我只是嘗試了第七的位置在這個代碼來解決問題的滾動)

public class MyAdapter extends BaseAdapter{ 

    MyFragmentManager mFragmentManager; 
    List<Tier3Category>list; 
    Context context;  
    ListView myList; 
    OneriDetail myObj; 
    Tier3Category obj; 


    public MyAdapter(Context context, List<Tier3Category> list, MyFragmentManager mFragmentManager, 
      ListView myList, int type) { 
     super(); 
     this.mFragmentManager = mFragmentManager; 
     this.list = list; 
    if(list.size()>1) 
     list.add(7,new Tier3Category("", "", "", "", "", "", "", "", "", "", "", "", "", false, false, false, "", "", "", "")); 
     Log.w("", list.size()+"asd"); 
     this.context = context; 
     this.myList = myList; 
    } 

    @Override 
    public int getCount() { 
     // TODO Auto-generated method stub 
     return list.size(); 
    } 

    @Override 
    public Tier3Category getItem(int position) { 
     if (getCount()>0){ 
      return list.get(position); 
     } 
     else{ 
      return null; 
     } 
    } 

    @Override 
    public long getItemId(int position) { 
     // TODO Auto-generated method stub 
     return position; 
    } 


    @Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 
     // TODO Auto-generated method stub 
     final ViewHolder1 vh ; 
     final ViewHolder2 vh2; 


     if(position!=7){   
     try { 
      if (convertView==null){   
       vh = new ViewHolder1(); 

        convertView = LayoutInflater.from(context).inflate(
          R.layout.adapter_oneri_list, parent, false); 
        vh.title = (TextView) convertView.findViewById(R.id.list_title);    
        convertView.setTag(vh); 
      }          
      else{ 
       vh = (ViewHolder1)convertView.getTag(); 
       } 
      convertView.setTag(vh); 
     } catch (Exception e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
      }   
     } 

     else { 
      try { 
       if (convertView==null){  
       vh2 = new ViewHolder2(); 
        convertView = LayoutInflater.from(context).inflate(R.layout.adapter_adv_item, parent,false); 
        vh2.adv_photo = (ImageView) convertView.findViewById(R.id.adv_image); 
        convertView.setTag(vh2);  

       }          
        else{ 
         vh2 = (ViewHolder2)convertView.getTag(); 
         } 
      } catch (Exception e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      }    
     } 

     return convertView; 
    } 
    public class ViewHolder1{ 
     TextView comment_count , like_count , follow_count , username , time , title , content, location , categoryname; 
     RoundedImageView sugg_photo; 
     RoundedImageView user_photo; 
     RelativeLayout threedot; 
     ImageView likeIcon , commentIcon , followIcon; 
    } 

    public class ViewHolder2{ 
     ImageView adv_photo;   
    } 
} 

enter image description here enter image description here

回答

1

我相信您有任何問題的原因是,你有沒有意識到ListView正在回收它的意見。看起來你正在使用2個不同的視圖,取決於視圖是否在位置7 - 因此你基本上使用了2種不同類型的視圖。問題在於ListView不知道這一點,所以你在5號位置創建的視圖可能會在滾動後結束於7號位置。這是作爲convertView參數傳入的。

我敢打賭,你會得到很多在LogCat中打印的堆棧跟蹤 - 一個非常重要的細節。

圍繞它最簡單的方法是檢查你得到什麼樣的觀點爲convertView:

 if(position!=7){   
    try { 
     if (convertView==null || convertView.getTag() ! instanceof ViewHolder1){  

else { 
     try { 
      if (convertView==null || convertView.getTag() ! instanceof ViewHolder2){  

我建議你做的另一件事是停止檢查位置7,而是做:

if (position % 7 != 0) 

這將檢查位置是否是7 - 涵蓋你提到的所有案例。

+0

非常感謝您,YOU ROCK。這工作:) –

相關問題