getItemViewType 返回哪一種類型的,然後通過baseadapter的getview(………….)返回視圖;
getViewTypeCount返回有幾種類型的佈局;
假設有需求:
所以
getViewTypeCount要返回2;
getItemViewType返回你view需要的類型假設爲0和1
public static final int TYPE_TITLE = 0;
public static final int TYPE_CONTENT = 1;
public static final int TYPE_CONUT = 2;
@Override
public int getItemViewType(int position) {
if(mList.get(position).getType() == TYPE_TITLE){
return TYPE_TITLE;
}else if (mList.get(position).getType() == TYPE_CONTENT){
return TYPE_CONTENT;
}
return 100;
}
@Override
public int getViewTypeCount() {
return TYPE_CONUT;
}
adapter的代碼如下
package com.mylayout;
import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
import java.util.ArrayList;
/**
* Created by wanzhciheng .
*
*/
public class AppliesAdapter extends BaseAdapter {
public static final int TYPE_TITLE = 0;
public static final int TYPE_CONTENT = 1;
public static final int TYPE_CONUT = 2;
private Context mContext;
private ArrayList<TypeBase> mList;
private int mCurrentType;
private LayoutInflater mInflater;
public AppliesAdapter(Context context, ArrayList<TypeBase> list){
this.mContext = context;
this.mList = list;
mInflater = LayoutInflater.from(context);
}
@Override
public int getCount() {
return mList.size();
}
@Override
public TypeBase getItem(int position) {
return mList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View comsumView = null;
View chargeView = null;
TypeBase appliesBean = mList.get(position);
mCurrentType = getItemViewType(position);
Log.e("SUPPLIES","mCurrentType ==== " + mCurrentType);
if(mCurrentType == TYPE_TITLE){
TitleViewHolder titleViewHolder = null;
if(convertView == null){
titleViewHolder = new TitleViewHolder();
comsumView = mInflater.inflate(R.layout.item_title,null);
titleViewHolder.mTitle = (TextView)comsumView.findViewById(R.id.title_id);
comsumView.setTag(titleViewHolder);
convertView = comsumView;
}else {
titleViewHolder = (TitleViewHolder)convertView.getTag();
}
titleViewHolder.mTitle.setText(appliesBean.getTitle());
}else if (mCurrentType == TYPE_CONTENT){
ContentViewHolder contentViewHolder = null;
if (convertView == null){
contentViewHolder = new ContentViewHolder();
chargeView = mInflater.inflate(R.layout.item_content,null);
contentViewHolder.name = (TextView)chargeView.findViewById(R.id.name);
contentViewHolder.typeName = (TextView)chargeView.findViewById(R.id.typeName);
contentViewHolder.des = (TextView)chargeView.findViewById(R.id.des);
chargeView.setTag(contentViewHolder);
convertView = chargeView;
}else {
contentViewHolder = (ContentViewHolder)convertView.getTag();
}
contentViewHolder.name.setText(appliesBean.getName());
contentViewHolder.typeName.setText(appliesBean.getTypeName());
contentViewHolder.des.setText(appliesBean.getDescription());
}
return convertView;
}
@Override
public int getItemViewType(int position) {
if(mList.get(position).getType() == TYPE_TITLE){
return TYPE_TITLE;
}else if (mList.get(position).getType() == TYPE_CONTENT){
return TYPE_CONTENT;
}
return 100;
}
@Override
public int getViewTypeCount() {
return TYPE_CONUT;
}
class ContentViewHolder{
TextView name;
TextView typeName;
TextView des;
}
class TitleViewHolder{
TextView mTitle;
}
}
數據初始化
package com.mylayout;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ListView;
import java.util.ArrayList;
public class MainActivity extends ActionBarActivity {
private ArrayList<TypeBase> list;
private AppliesAdapter appliesAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ListView listView = (ListView)this.findViewById(R.id.listview);
list= new ArrayList<TypeBase>();
init();
appliesAdapter = new AppliesAdapter(this,list);
listView.setAdapter(appliesAdapter);
}
private void init() {
for(int i= 0;i<20;i++){
TypeBase base = new TypeBase();
base.setType(0);
base.setTitle("title" + i);
list.add(base);
for(int j = 0;j<5;j++){
TypeBase base1 = new TypeBase();
base1.setType(1);
base1.setDescription("描述" + j);
base1.setName("name " + j);
base1.setTypeName("type" + j);
list.add(base1);
}
}
}
}
很簡單