使用具有多个布局的listview

时间:2014-03-01 10:46:59

标签: android listview android-listview

我知道方法如:

@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中行的“位置”确定要使用的布局。但是,在我的情况下,要使用的布局取决于要在行中显示的数据类型。因此,对于行位置,我无法知道要使用哪种布局。 请帮忙!

2 个答案:

答案 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;
}