2013-11-02 114 views
0

我試圖把多個視圖放到一個列表視圖,但即使當我使用getItemViewType()和getViewTypeCount),它不起作用,錯誤是:「ArrayIndexOutofBoundsException長度= 2;指數= 2;在列表視圖中間添加一個視圖

這裏是我的代碼:

public class SearchAdapter extends BaseAdapter { 
private static final int TYPE_MOVIE = 1; 
private static final int TYPE_ADS = 2; 
private Context context; 
private List<MovieObject> movies; 
private LayoutInflater inflater; 

public SearchAdapter(Context context, List<MovieObject> movies) { 
    this.context = context; 
    this.movies = movies; 
    inflater = (LayoutInflater) context 
      .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
} 

@Override 
public int getViewTypeCount() { 
    // TODO Auto-generated method stub 
    return 2; 
} 

@Override 
public int getItemViewType(int position) { 
    int separator = (movies.size()/2) + 1; 
    if (position == separator) { 
     return TYPE_ADS; 
    } else { 
     return TYPE_MOVIE; 
    } 
} 

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

@Override 
public Object getItem(int position) { 
    // TODO Auto-generated method stub 
    return movies.get(position); 
} 

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

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    int type = getItemViewType(position); 
    View v = convertView; 
    ViewHolder h = null; 
    ViewHolderAds h2 = null; 
    if (v == null) { 
     h = new ViewHolder(); 
     switch (type) { 
     case TYPE_MOVIE: 
      v = inflater.inflate(R.layout.adapter_search, null); 
      h = new ViewHolder(); 
      break; 
     case TYPE_ADS: 
      v = inflater.inflate(R.layout.view_ads, null); 
      h2 = new ViewHolderAds(); 
      v.setTag(h2); 
      break; 
     default: 
      break; 
     } 
     v.setTag(h); 
    } else { 
     if (type == TYPE_MOVIE) { 
      h = (ViewHolder) v.getTag(); 
     } else { 
      h2 = (ViewHolderAds) v.getTag(); 
     } 

    } 
    return v; 
} 

private class ViewHolder { 
    TextView tv_title, tv_date, tv_certification, tv_runtime; 
} 

private class ViewHolderAds { 

} 
} 

回答

0

變化

private static final int TYPE_MOVIE = 1; 
private static final int TYPE_ADS = 2; 

private static final int TYPE_MOVIE = 0; 
private static final int TYPE_ADS = 1; 

內部Android使用這些常數作爲指數的看法陣列,通過getViewTypeCount()返回的大小,而不能有大小2索引2的陣列(那是什麼的例外是告訴你)

+0

好吧,謝謝它的工作,但在相關說明中,當我這樣做時,我失去了一個我的電影對象,應該是在這個位置:int separator =(movies.size()/ 2)+ 1;我如何添加一個視圖而不是替換? – Tsunaze

+0

我不明白。你能改說嗎? – Blackbelt

+0

我想要的是在兩部電影之間放置另一個對象,即不是電影(它是廣告)。我打算將廣告放在頁面中間。但是當我使用這種方法時,它會將電影與廣告重疊。 – Tsunaze