我知道方法如:
@Override
public int getItemViewType(int position) {
// Define a way to determine which layout to use, here it's just evens and odds.
return position % 2;
}
@Override
public int getViewTypeCount() {
return 2; // Count of different layouts
}
当我们想要使用单个适配器使用多个布局时,很有用。 但是这些方法根据listview中行的“位置”确定要使用的布局。但是,在我的情况下,要使用的布局取决于要在行中显示的数据类型。因此,对于行位置,我无法知道要使用哪种布局。 请帮忙!
答案 0 :(得分:2)
您可以在适配器中的对象内使用类型(或其他检查)。 类似的东西:
protected static final int TYPE_ROW = 0;
protected static final int TYPE_HEADER = 1;
@Override
public int getItemViewType(int position) {
if (getItem(position).isHeader())
return TYPE_HEADER;
return TYPE_ROW;
}
然后你可以在getView()方法中使用它,例如:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
MyRow item = getItem(position);
int viewType = this.getItemViewType(position);
switch (viewType) {
case TYPE_HEADER:
//
break;
case TYPE_ROW:
//
break;
}
///....
}
答案 1 :(得分:0)
是的!在这里我找到了解决方案。我只需要使用我的数据结构来找到正确的行。
public int getItemViewType(int position) {
//we have an image so we are using an ImageRow
if (animals.get(position).getImageId() != null) return 0;
//we don't have an image so we are using a Description Row
else return 1;
}