Android一点 ListView显示多种布局

当我们需要在ListView中显示多种视图时,仍然使用继承BaseAdapter的方式,要注意的是getItemViewType(int position)和getViewTypeCount()这两个方法。 getViewTypeCount()就是获取列表有几种布局类型,getItemViewType(int position)是获取在position位置上的布局类型。


package com.example.test1;

import java.util.ArrayList;
import java.util.HashMap;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.LinearLayout;
import android.widget.TextView;

public class TestMulAdapter extends BaseAdapter {
	ArrayList<HashMap<String, Object>> ls;
	Context mContext;
	LinearLayout linearLayout = null;
	LayoutInflater inflater;
	TextView tex;

	// 有三种布局
	final int VIEW_TYPE = 3;
	final int TYPE_1 = 0;
	final int TYPE_2 = 1;
	final int TYPE_3 = 2;

	public TestMulAdapter(Context context,
			ArrayList<HashMap<String, Object>> list) {
		ls = list;
		mContext = context;
	}

	@Override
	public int getCount() {
		return ls.size();
	}

	@Override
	public Object getItem(int position) {
		return ls.get(position);
	}

	@Override
	public long getItemId(int position) {
		return position;
	}

	// 每个convert view都会调用此方法,获得当前所需要的view样式
	@Override
	public int getItemViewType(int position) {

		// 得到type
		int type = (Integer) ls.get(position).get("type");

		return type;
	}

	@Override
	public int getViewTypeCount() {
		return 3;
	}

	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		ViewHolder1 holder1 = null;
		ViewHolder2 holder2 = null;
		ViewHolder3 holder3 = null;
		int type = getItemViewType(position);
		if (convertView == null) {
			inflater = LayoutInflater.from(mContext);
			// 按当前所需的样式,确定new的布局
			switch (type) {
			case TYPE_1:

				convertView = inflater.inflate(R.layout.item1, parent, false);
				holder1 = new ViewHolder1();
				holder1.rank1 = (TextView) convertView
						.findViewById(R.id.textView1);
				convertView.setTag(holder1);
				break;
			case TYPE_2:
				convertView = inflater.inflate(R.layout.item2, parent, false);
				holder2 = new ViewHolder2();
				holder2.rank2 = (TextView) convertView
						.findViewById(R.id.textView1);
				convertView.setTag(holder2);
				break;
			case TYPE_3:
				convertView = inflater.inflate(R.layout.item3, parent, false);
				holder3 = new ViewHolder3();
				holder3.rank3 = (TextView) convertView
						.findViewById(R.id.textView1);
				convertView.setTag(holder3);
				break;
			default:
				break;
			}

		} else {
			switch (type) {
			case TYPE_1:
				holder1 = (ViewHolder1) convertView.getTag();
				break;
			case TYPE_2:
				holder2 = (ViewHolder2) convertView.getTag();
				break;
			case TYPE_3:
				holder3 = (ViewHolder3) convertView.getTag();
				break;
			}
		}
		// 设置资源
		switch (type) {
		case TYPE_1:
			holder1.rank1.setText("" + (type + 1));
			break;
		case TYPE_2:
			holder2.rank2.setText("" + (type + 1));
			break;
		case TYPE_3:
			holder3.rank3.setText("" + (type + 1));
			break;
		}

		return convertView;
	}

	public class ViewHolder1 {
		TextView rank1;
	}

	public class ViewHolder2 {
		TextView rank2;
	}

	public class ViewHolder3 {
		TextView rank3;
	}
}


在MainActivity中使用

 ListView listView1=(ListView) findViewById(R.id.listView1);
       
       ArrayList<HashMap<String, Object>> ls=new ArrayList<HashMap<String,Object>>();
       for(int i=0;i<12;i++){
    	   HashMap<String, Object> map=new HashMap<String, Object>();
    	   map.put("type",new Random().nextInt(3));
    	   ls.add(map);
       }
       
       listView1.setAdapter(new TestMulAdapter(this, ls));


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值