BaseAdapter有几个方法可以重写,以便根据位置返回不同类型的视图。
@Override
public int getItemViewType(int position) {
if (...) return 1;
else if (...) return 2;
else if (...) return 3;
else return 4;
}
@Override
public int getViewTypeCount() {
return 4; //total number of different type of views
}
@Override
public View getView(int position, View view, ViewGroup viewGroup) {
switch (getItemViewType(position)) {
case 0:
if (view == null) {
view = mActivity.getLayoutInflater().inflate(R.layout.message_item_1, viewGroup, false);
}
break;
case 1:
if (view == null) {
view = mActivity.getLayoutInflater().inflate(R.layout.message_item_1_media, viewGroup, false);
}
break;
case 2:
if (view == null) {
view = mActivity.getLayoutInflater().inflate(R.layout.message_item_2, viewGroup, false);
}
break;
case 3:
if (view == null) {
view = mActivity.getLayoutInflater().inflate(R.layout.message_item_2_media, viewGroup, false);
}
break;
}
}
编辑:
将数据馈送到适配器时,可以将其作为
List of Object
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) mContext
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if(layout == LayoutTYPE_1){ //LollipopView
// getItem(postion) will give you Object - downcast it as per the position.
Runner runner = (LollipopRunner)(getItem(position)); //downcast to lollipopRunner
gridView = inflater.inflate(R.layout.lollipopRunner, null); //use lollipopRunner XML
}else if(layout == LayoutTYPE_2){
Runner runner = (BasicRunner)(getItem(position)); //downcasted to basic runner
gridView = inflater.inflate(R.layout.basicrunner, null); //use basic runner XML