listview的简单使用

我们经常会在应用程序中使用列表的形式来展现一些内容,ListView就是用来展示这些信息的控件。要使用ListView,首先要了解什么是适配器。适配器是一个连接数据和AdapterView(ListView就是一个典型的AdapterView,后面还会学习其他的)的桥梁,通过它能有效地实现数据与AdapterView的分离设置,使AdapterView与数据的绑定更加简便,修改更加方便. 常见的有ArrayAdapter用来绑定一个数组,支持泛型操作,SimpleAdapter用来绑定在xml中定义的控件对应的数据.SimpleCursorAdapter用来绑定游标得到的数据. BaseAdapter自定义一个适配器

首先新建一个item_listview的布局页面



    
    
    


一 ArrryAdapter的使用

java代码:

protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		String[] objects = new String[]{
				"老王",
				"老赵",
				"呵呵"
		};
		
		ListView lv = (ListView) findViewById(R.id.lv);
//		lv.setAdapter(new ArrayAdapter(this, R.layout.item_listview, R.id.tv_name, objects));


二SimpleAdapter的使用

java代码:

protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		ListView lv = (ListView) findViewById(R.id.lv);
		
		//集合中每个元素都包含ListView条目需要的所有数据,该案例中每个条目需要一个字符串和一个整型,所以使用一个map来封装这两种数据
		List> data = new ArrayList>();
		
		Map map1 = new HashMap();
		map1.put("photo", R.drawable.photo1);
		map1.put("name", "小志的儿子");
		data.add(map1);
		
		Map map2 = new HashMap();
		map2.put("photo", R.drawable.photo2);
		map2.put("name", "小志");
		data.add(map2);
		
		Map map3 = new HashMap();
		map3.put("photo", R.drawable.photo3);
		map3.put("name", "赵帅哥");
		data.add(map3);
		
		lv.setAdapter(new SimpleAdapter(this, data, R.layout.item_listview, 
				new String[]{"photo", "name"}, new int[]{R.id.iv_photo, R.id.tv_name}));
	}

三 BaseAdapter的使用

* 必须实现的两个方法
* 第一个
//系统调用此方法,用来获知模型层有多少条数据
@Override
public int getCount() {
return people.size();
}

* 第二个


//系统调用此方法,获取要显示至ListView的View对象
//position:是return的View对象所对应的数据在集合中的位置
// 第一次调用就是0 ,第二次就是1 第三次就是2
@Override
public View getView(int position, View convertView, ViewGroup parent) {
System.out.println("getView方法调用" + position);
TextView tv = new TextView(MainActivity.this);
//拿到集合中的元素
Person p = peoplelist.get(position);
tv.setText(p.toString());

//把TextView的对象返回出去,它会变成ListView的条目
return tv;
}
* 屏幕上能显示多少个条目,getView方法就会被调用多少次,屏幕向下滑动时,getView会继续被调用,创建更多的View对象显示至屏幕
* 当条目划出屏幕时,系统会把该条目缓存至内存,当该条目再次进入屏幕,系统在重新调用getView时会把缓存的条目作为convertView参数传入,
但是传入的条目不一定是之前被缓存的该条目,即系统有可能在调用getView方法获取第一个条目时,
传入任意一个条目的缓存

示例:

 class MyAdapter extends BaseAdapter{

    	//系统调用,用来获知集合中有多少条元素
		@Override
		public int getCount() {
			return personList.size();
		}
		
		//由系统调用,获取一个View对象,作为ListView的条目
		//position:本次getView方法调用所返回的View对象,在listView中是处于第几个条目,那么position的值就是多少
		@Override
		public View getView(int position, View convertView, ViewGroup parent) {
			Person p = personList.get(position);
			
//			TextView tv = new TextView(MainActivity.this);
			System.out.println("getView调用:" + position + ";" + convertView);
//			tv.setText(p.toString());
//			tv.setTextSize(18);
			
			View v = null;
			//判断条目是否有缓存
			if(convertView == null){
				//把布局文件填充成一个View对象
				v = View.inflate(MainActivity.this, R.layout.item_listview, null);
			}
			else{
				v = convertView;
			}
			
			//获取布局填充器对象
//			LayoutInflater inflater = LayoutInflater.from(MainActivity.this);
//			使用布局填充器填充布局文件
//			View v2 = inflater.inflate(R.layout.item_listview, null);
			
//			LayoutInflater inflater2 = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
//			View v3 = inflater2.inflate(R.layout.item_listview, null);
			
			//通过资源id查找组件,注意调用的是View对象的findViewById
			TextView tv_name = (TextView) v.findViewById(R.id.tv_name);
			tv_name.setText(p.getName());
			TextView tv_phone = (TextView) v.findViewById(R.id.tv_phone);
			tv_phone.setText(p.getPhone());
			TextView tv_salary = (TextView) v.findViewById(R.id.tv_salary);
			tv_salary.setText(p.getSalary());
			return v;
		}
		
		@Override
		public Object getItem(int position) {
			return null;
		}

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







你可能感兴趣的:(安卓,listview,android)