google-code-prettify

2013-04-15

ListViewで、行ごとに違うViewを使う

ListViewでAdapterを使う際、getItemViewType()とgetViewTypeCount()をoverrideすることで、ListView中に複数のViewを混ぜることができる。
例えば、3種類のviewが存在する場合、
int getItemViewType(int position) {
    return position % 3; // 行じ応じたViewのタイプを返す。タイプは0,1,2,3...と0始まりであること。
}

int getViewTypeCount() {
    return 3; // Viewのタイプの数
}
としておく。
View getView(int position, View convertView, ViewGroup parent)
に渡されてくるconvertViewには再利用されるべきViewが渡されてくるのだが、上記のようにgetItemViewType()とgetViewTypeCount()をoverrideしていれば、そのpositionに応じた正しい種類のViewがconvertViewに渡されてくる。

コード例:
int getItemViewType(int position) {
    return position % 3; // 行じ応じたViewのタイプを返す。タイプは0,1,2,3...と0始まりであること。
}

int getViewTypeCount() {
    return 3; // Viewのタイプの数
}

View getView(int position, View convertView, ViewGroup parent) {
    switch (getItemViewType(position)) {
    case 0:
        if (convertView == null) {
            convertView = inflater.inflate(R.layout.item1, parent, false);
        }
        break;
    case 1:
        if (convertView == null) {
            convertView = inflater.inflate(R.layout.item2, parent, false);
        }
        break;
    case 2:
        if (convertView == null) {
            convertView = inflater.inflate(R.layout.item3, parent, false);
        }
        break;
    }
    return convertView;
}

0 件のコメント: