ListView 学习笔记


ListView 是Android 中一种常用的组建, 需要配合适配器(adapter), 实现一个列表的效果。 Android中有若干View组建,都是需要适配器来加载数据的。


1)ArrayAdapter

ListView 常见的适配器有两种,一种是ArrayAdapter, 使用较为简单。

	private ListView mListView;

	private ArrayAdapter<String> mArrayAdapter;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
	mListView = (ListView) findViewById(R.id.listview_main);
		//1. 新建适配器 
		//context, 列表项,数据源
		//3.加载数据源
		String[] mail={"mail1","mail2","mail3","mail1","mail2","mail3","mail3","mail1","mail2","mail3","mail3","mail1","mail2","mail3","mail3","mail1","mail2","mail3","mail3","mail1","mail2","mail3"};
	mArrayAdapter=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, mail);
		//3.ListView加载适配器
	mListView.setAdapter(mArrayAdapter);
	}

其中,R.layout.simple_list_item_1, 是一个单行的TextView,正好与数组mail[] 对应,填充进去


2) simpleAdapter

相比于ArraryAdapter, simpleAdapter 可以实现更加单个Item 包含多个view组建。 

现在想一下,ArraryAdapter对应单层数据结构,因此用数组就可以完成适配。但是simpleAdapter是一个表的结构,是一个二维的结构,因此应该对应一个hashmap.组成的list。 

对于单个Item,hashmap的key 就是item种view的id, key对应的值就是view 的填充值(如textView 对应String,imageView对应Int 图片Id)。

整个ListView又是由许多Item组成,因此与之适配的数据是以map为元素的list. 既

 List<? extends Map<String, ?>>   //? 可以是object, 或其任意子类,比如int, string. 别的值一般也填不进去


	private ListView mListView;

	private SimpleAdapter mSimpleAdapter;
	private List<Map<String,String>> mailList;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
	mListView = (ListView) findViewById(R.id.listview_main);
		//simpleAdapter()
		/*参数包括
		 * context:上下文
		 * data: 数据源 ( List<? extends Map<String, ?>> ) 一个map 组成的List 集合
		 * 				每一行,也就是一个Map<String, ?>,对应listView 中的一个Item。(因为每一个Item包含好几个组建)
		 * 				每一个String 就是Map中的一个Key值,必须包含From中指定的Key
		 * resource:列表项的布局文件????
		 * from: map 中的Key名,
		 * to:绑定listView 中 Item 的Id, 与from 对应
		 */
	
	
		//1. 初始化适配器
		int  [] to ={R.id.textview_address,R.id.textview_title,R.id.textview_preview};
		String [] from={"address","title","preview"};
		mailList=new ArrayList<Map<String,String>>();
		
		
		mSimpleAdapter=new SimpleAdapter(this, getMails(), R.layout.list_item, from, to);
		mListView.setAdapter(mSimpleAdapter);
		

	}
	
	
	/**
	 * @return 邮件列表
	 */
	private List<Map<String,String>> getMails() {
		
			
			for(int i=0;i<17;i++){
				Map<String, String> map= new HashMap<String, String>();
				map.put("address", "mail_address@163.com"+i);
				map.put("title", "title"+i);
				map.put("preview", "网易养猪场坐落于浙江省湖州市安吉县,总面积约1200亩...");
				
				mailList.add(map);
				
			}
		
			return mailList;
	}












  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值