ListView


ListView的使用很简单。
1.在布局文件中添加ListView
2.在Activity onCreate 方法中通过findViewById获得ListView实例
3.生成一个listAdapter的子类,包括其中的数据
4.调用ListView的setAdapter方法,绑定ListView和刚生成的Adapter
OK,这样就可以了

原理上ListView封装了UI的布局实现,Adapter封装了数据,并提供接口负责ListView的每一项如何和一条数据绑定.这个接口就是getView。

动态ListView的实现,也很简单,在数据发生变化之后,调用Adapter的notifyDataSetChanged方法即可。

注意点
有的时候ListView中的每一项不是简单的TextView或者其他既有控件,
而是我们自己定义的个性化布局,此时我们一般定义好布局的layout文件,
然后在getView中通过LayoutInflater解析布局文件,获得布局的实例,这个接口有4个
public View inflate (int resource, ViewGroup root)
public View inflate (XmlPullParser parser, ViewGroup root)
public View inflate (XmlPullParser parser, ViewGroup root, boolean attachToRoot)
public View inflate (int resource, ViewGroup root, boolean attachToRoot)

如果root非空, 我们必须使用最后2个接口,并且attachToRoot设置为false
提供root是为了继承root的一些布局属性,如果不需要,root设置为null,调用前两个接口即可.

如果root非空,而attachToRoot又为true,LayoutInflater会调用root的addView方法,而AdapterView不支持addView,就会报错
public void addView(View child) {
    throw new UnsupportedOperationException("addView(View) is not supported in AdapterView");

}

下面是个小的例子

package com.example.howtouselistview;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.ListView;

public class MainActivity extends Activity {

	private ListView lv;
	private DataAdapter da;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		lv = (ListView) findViewById(R.id.list);
		da = new DataAdapter(this);
		lv.setAdapter(da);
		Button btn = (Button) findViewById(R.id.btn); // 这里我在布局中添加了一个button, 用来改变adapter中的数据
		btn.setOnClickListener(new View.OnClickListener() {

			@Override
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				da.changeData();
			}
			
		});
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

}

package com.example.howtouselistview;

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

public class DataAdapter extends BaseAdapter {

	private String list1[] = {"list1", "lion", "tiger", "cat", "dog", "mice"};
	private String list2[] = {"list2", "meat", "cattegre", "xxx", "yyy"};
	private String list3[] = {"list3", "red", "green", "yellow", "orange","blue","white"};
	
	private String data[];
	private Context cxt;
	
	public DataAdapter(Context c) {
		data = list1;
		cxt = c;
	}
	
	@Override
	public int getCount() {
		// TODO Auto-generated method stub
		return data.length;
	}

	@Override
	public Object getItem(int arg0) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public long getItemId(int arg0) {
		// TODO Auto-generated method stub
		return arg0;
	}

	@Override
	public View getView(int arg0, View arg1, ViewGroup arg2) {
		// TODO Auto-generated method stub
		TextView tv;
		if (arg1 instanceof TextView) {
			tv = (TextView) arg1;
		}else {
			tv = new TextView(cxt);
		}
		tv.setText(data[arg0]);
		return tv;
	}

	public void changeData() {
		if(data.equals(list1))
			data = list2;
		else if (data.equals(list2))
			data = list3;
		else 
			data = list1;
		this.notifyDataSetChanged();
	}
	
}


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值