android: BaseAdapter和ListView简单运用(08)

//BaseAdapter和ListView简单运用
public class MainActivity extends Activity {
	private ListView listview;
	private List<String> list;
	private MyBaseAdapter adapter;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		this.listview = (ListView) this.findViewById(R.id.listview);
		// 简单得给点数据
		list = new ArrayList<String>();
		for (int i = 0; i < 100; i++) {
			list.add("item" + i);
		}
		adapter = new MyBaseAdapter(list);
		listview.setAdapter(adapter);// 绑定适配器
	}

	class MyBaseAdapter extends BaseAdapter {
		private List<String> list;

		public MyBaseAdapter(List<String> list) {
			this.list = list;
		}

		@Override
		public int getCount() {
			// 返回总的数量
			return this.list.size();
		}

		@Override
		public Object getItem(int position) {
			// 获得点击选中的位置
			return this.list.get(position);
		}

		@Override
		public long getItemId(int position) {
			// 当前行的id
			return position;
		}

		@Override
		// 每加载一项(item)都要调用该方法,返回当前的视图;在屏幕的
		// 第一屏时convertView为null,一屏过后不为null
		public View getView(int position, View convertView, ViewGroup parent) {
			ViewHolder vHolder;
			if (convertView == null) {// 在第一屏调用时
				vHolder = new ViewHolder();
				// 把item_listview.xml布局文件转换为java对象(布局(视图)对象)
				// 使用布局填充器生成getLayoutInflater()
				// 三种方式文件布局关联,这是最简单的一种
				convertView = getLayoutInflater().inflate(
						R.layout.item_listview, null);
				// 第二种:
				// LayoutInflater.from(MainActivity.this).inflate(R.layout.item_listview,
				// null);
				// 第三种:通过系统服务拿到生成器,再进行布局,前面两种底层都是调用第三种
				LayoutInflater inflater = (LayoutInflater) getSystemService(Service.LAYOUT_INFLATER_SERVICE);
				inflater.inflate(R.layout.item_listview, null);// root父容器的布局,设置为null,会自动给我布局
				TextView text_info = (TextView) convertView
						.findViewById(R.id.text_info);
				// 将找到控件的(id)名赋值给封装类(javaBean)保存
				vHolder.text_info = text_info;
				// 设置一个标记,方便第二屏调用(重用这个)
				convertView.setTag(vHolder);
				Log.i("MainActivity", this.list.get(position));
			} else {
				// 第二屏调用时,重用第一屏的item(控件id名)
				vHolder = (ViewHolder) convertView.getTag();
			}
			// 把当前行的的内容设置给text_info显示
			vHolder.text_info.setText(this.list.get(position));
			return convertView;
			/*
			 * //以上代码是下面的优化,优化后不会每一次都创建item,而是重用item,但是要建一个ViewHolder类
			 * //把item_listview.xml布局文件转换为java对象(布局(视图)对象)
			 * //使用布局填充器生成getLayoutInflater()
			 * convertView=getLayoutInflater().inflate(R.layout.item_listview,
			 * null); TextView text_info=(TextView)
			 * convertView.findViewById(R.id.text_info); Log.i("MainActivity",
			 * this.list.get(position)); //把当前行的内容设置给text_info
			 * text_info.setText(this.list.get(position)); return
			 * convertView;//返回当前行的视图,然后把视图放到listview(父容器)
			 */
		}

	}

	class ViewHolder {
		private TextView text_info;// 布局中元素的封装类
	}
}

//主布局文件
<ListView
        android:id="@+id/listview"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

//适配器绑定的自定义布局文件
  <TextView
        android:id="@+id/text_info"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="" />


转载于:https://my.oschina.net/u/2541146/blog/603764

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值