1

到现在为止,我曾经以ListView这种方式填充我,使用SimpleAdapter

// Example of a list with cells containing some text and an image
SimpleAdapter mSchedule = new SimpleAdapter (this.getBaseContext(), list, R.layout.my_cell, 
              new String[] {"img", "title"}, new int[] {R.id.img, R.id.title});

list.setAdapter(mSchedule);

这个解决方案效果很好,但我只能在这里使用一种单元格my_cell

有什么办法解决这个问题吗?谢谢。

4

1 回答 1

4

您需要覆盖一些适配器方法,最重要的是:getViewTypeCount()getItemViewType()getView().

getViewTypeCount()返回适配器中不同视图类型的数量。
getItemViewType()返回适配器中特定位置的视图类型。如果是
getView(),则必须创建正确类型的视图。 如果 convertView 不是,它将根据and先前返回的信息属于正确的类型。convertViewnull
nullgetViewTypeCount()getItemViewType()

PS @Rob 我所有的例子都很大,所以我会试着简要解释一下:假设你只有 2 种视图类型。

  • getViewTypeCount()应该返回 2
  • getItemViewType()应返回 0 或 1,具体取决于position参数。之前会调用这个方法getView()
  • getView()position使用与调用相同的参数调用getItemViewType()position使用与您在getItemViewType()确定应返回哪种视图类型时使用的基于相同的算法(您甚至可以getItemViewType()在此处重复使用)。然后检查是否convertView为空。
    • 如果为 null,则创建正确类型的新视图并绑定值。
    • 如果它不为空,只需重新使用它并绑定值。Android 在重用视图时传递了正确的视图类型。
于 2013-06-06T19:17:59.343 回答