ListView с несколькими типами макета строки – BaseAdapter не работает должным образом в Android

Привет, ниже мой класс для baseadapter, но он работает неправильно:

private static class MyBaseAdapter extends BaseAdapter { private Context context; private LayoutInflater inflater; private MyBaseAdapter(Context context, FlipViewController controller) { inflater = LayoutInflater.from(context); this.context = context; } @Override public int getCount() { return Globals.list_album.size(); } @Override public Object getItem(int position) { return position; } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { View layout = convertView; if (convertView == null ) { if (Globals.list_album.get(position).no_of_images == 1) { layout = inflater.inflate(R.layout.single_image_adapter, null); } else if(Globals.list_album.get(position).no_of_images == 2) { layout = inflater.inflate(R.layout.two_image_adapter, null); } else if(Globals.list_album.get(position).no_of_images == 3) { layout = inflater.inflate(R.layout.three_image_adapter, null); } else if(Globals.list_album.get(position).no_of_images == 4) { layout = inflater.inflate(R.layout.four_image_adapter, null); } else if(Globals.list_album.get(position).no_of_images == 5) { layout = inflater.inflate(R.layout.five_image_adapter, null); } } return layout; } } 

Я хочу загрузить макет в соответствии с отсутствием изображений в Globals.list_album для каждой позиции. Но он работает неправильно. Это не работает для no_of_images = 5 и 2, поскольку у меня есть такие значения в списке. В настоящее время мои значения для no_of_images равны 4,3,1,2 и 5. Таким образом, он должен отображать макеты four_image_adapter, three_image_adapter, one_image_adapter, two_image_adapter и five_image_adapter. Но он отображает four_image_adapter, three_image_adapter, one_image_adapter, four_image_adapter и three_image_adapter. Все макеты имеют изображения в зависимости от количества изображений. Кто-нибудь скажет мне, что мне делать?

Поскольку вам нужна разная компоновка для разных строк, используйте ниже методы

GetViewTypeCount () – возвращает информацию о количестве типов строк.

GetItemViewType (int position) – возвращает информацию о том, какой тип макета следует использовать в зависимости от позиции

Используя getItemViewType, вы можете определить макет, который вам нужно использовать.

Как это

 public static final int TYPE_1 = 1; public static final int TYPE_2 = 2; public int getItemTypeCount(){ return 5; } public int getItemType(int position){ // Your if else code and return type ( TYPE_1 to TYPE_5 ) } public View getView(int position, View convertView, ViewGroup parent){ // Return the right kind of view based on getItemType(position) int type = getItemType(position); if(type == TYPE_1){ // create (or reuse) TYPE_1 view } else if() { }...... return myView; } 

образцы

http://android.amberfog.com/?p=296

http://www.survivingwithandroid.com/2014/08/android-listview-with-multiple-row.html