一個listView中可能要顯示不同風格的item,下面就來介紹一下怎樣來實現。
先附上效果圖
首先,自定義一個適配器
在adapter中必須實現這兩個方法
/**
* @param position 用於判斷加載哪種item 根據自己的需要來實現
* @return
*/
@Override
public int getItemViewType(int position) {
if (position == 0) {//是否是第一項
return 0;
} else if (position == 1) {//是否是第二項
return 1;
} else {
return 2;
}
}
/**
* @return Item的種類 這裏共三種,TYPE_COUNT==3;
*/
@Override
public int getViewTypeCount() {
return TYPE_COUNT;
}
然後在getView方法中調用getItemViewType(position)來判斷加載哪種佈局
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (getItemViewType(position) == 0) {/**加載第一種item**/
if (convertView == null) {
viewHolder = new ViewHolder();
convertView = View.inflate(context, R.layout.list_item_one, null);
viewHolder.firstText = (TextView) convertView.findViewById(R.id.tv_item_one);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.firstText.setText(arrayList.get(position).getFirstItem());
} else if (getItemViewType(position) == 1) {/**加載第二種item**/
if (convertView == null) {
viewHolder = new ViewHolder();
convertView = View.inflate(context, R.layout.list_item_two, null);
viewHolder.secondTextTop = (TextView) convertView.findViewById(R.id.tv_item_two_top);
viewHolder.secondTextBottom = (TextView) convertView.findViewById(R.id.tv_item_two_bottom);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.secondTextTop.setText(arrayList.get(position).getSecondItemTop());
viewHolder.secondTextBottom.setText(arrayList.get(position).getSecondItemBottom());
} else if (getItemViewType(position) == 2) {/**加載第三種item**/
if (convertView == null) {
viewHolder = new ViewHolder();
convertView = View.inflate(context, R.layout.list_item_three, null);
viewHolder.thirdText = (TextView) convertView.findViewById(R.id.tv_item_three);
viewHolder.imageView = (ImageView) convertView.findViewById(R.id.iv_item_three);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.thirdText.setText(arrayList.get(position).getThirdItemText());
viewHolder.imageView.setImageResource(arrayList.get(position).getThirdItemImg());
}
return convertView;
}
三種item的佈局文件比較簡單,這裏就不貼上來了。
接下來就是在activity中調用了
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = (ListView) findViewById(R.id.lv_main);
initData();
listView.setAdapter(new ListViewAdapter(this, arrayList));
}
初始化數據:
/**
* 初始化數據
* 根據自己的需要初始化數據,我這裏把所有的item放在一個javabean裏面,
* 需要用哪個初始化哪個,我爲了簡單這樣寫的,但不建議這樣寫
*/
private void initData() {
arrayList = new ArrayList<>();
arrayList.add(new ItemData("first item"));
arrayList.add(new ItemData("second item top", "second item bottom"));
arrayList.add(new ItemData("third item text1", R.mipmap.ic_launcher));
arrayList.add(new ItemData("third item text2", R.mipmap.ic_launcher));
arrayList.add(new ItemData("third item text3", R.mipmap.ic_launcher));
}
好了,這樣就基本上完成了。