Android开发详解之ListView详解一

列表ListView介绍和实例


 1.ListView  -- ListActivity -- ListAdapter
 2.ArrayAdapter结合ListView进行显示
 3.SimpleAdapter结合ListView进行显示
 4.处理单击ListView事件,处理选择ListView的事件
 5.使用SimpleCursorAdapter与ListView进行关联

 ListView :

要让一个ListView显示出来需要的3个条件:

1.ListView  --- 需要被显示的列表
2.Data      --- 和ListView绑定的数据,一般是一个Cursor或字符串数组
3.ListAdapter --- data和ListView的桥梁  --- 适配作用


常用ListAdapter子类:


ArrayAdapter     ---  数组适配  ---- ListAdapter的直接子类


  ArrayList<类型>(context,int itemLayout, data)
  context:上下文环境
  itemLayout:自定义的每一项要显示的Layout
  data:要显示的数据
 例子:
  ArrayAdapter<String> adapter = new ArrayAdapter<String>(ArrayAdapterListViewActivity.this, android.R.layout.simple_list_item_1, data);
   android.R.layout.simple_list_item_1  --- 使用Android自带的 每一项Listview显示布局   -- 实际应用中常常自定义此item布局


  特别注意:itemLayout  --- ListView中每一项(行)的布局  ---  可以引用系统自带的,但 实际项目中更多是使用自定义的item布局


  系统自带的常用item布局:
  android.R.layout.simple_list_item_1    ----- 每一项只有一个TextView
  android.R.layout.simple_list_item_1    ----- 每一项只有两个TextView
  android.R.layout.simple_list_item_single_choice   ----- 每一项有一个TextView,但这一项可以被选择


SimpleAdapter    ---  简单适配  ---- ListAdapter的直接子类
 
 通过SimpleAdapter可以让ListView当中的每一项内容更加个性化,
 通常将ListView中某项的布局信息写在XML文件中,这个布局文件通过R.layout.XX -- 引入到ListView中
 
 SimpleAdapter是ArrayList和Listview之间的桥梁  
 ArrayList中的每一项都是一个Map<String,?>类型。ArrayList当中的每一项Map对象都和ListView当中的一项进行数据绑定和一一对应


SimpleAdapter的构造器:
public SimpleAdapterK(Context context, List<? extends Map<String,?>> data, int resource, String[] from , int[] to)


context  -- 上下文
data     -- 基于Map的List,Data里面的每一项都和ListIView里的每一项对应。Data里面的每一项都是Map类型,
            这个Map类中包含了ListView每一行需要的数据  --- 常用  data = new ArrayList<Map<String,Object>>();
resource -- 一个layout, 必须包含在to中出现的那些View,系统提供或自定义layout布局都可。
            系统提供的有:android.R.layout.simpe_list_item_single_choice
                 android.R.layout.two_line_list_item
from     -- 数组名,每一个名字是为了在ArrayList中的每一个item中索引Map<String, Object>的Object用的
to       -- 这里面是一个TextView的数组,这些TextView以id形式表示,这鞋View必须是TextView


 
为ListView中的每一项添加事件处理:    OnItemClickListener 
 
OnItemClickListener listener = new OnItemClickListener() {


@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
setTitle(parent.getItemAtPosition(position).toString());
}
};

listView.setOnItemClickListener(listener);


说明:
onItemClick  --  回调函数,当用户单击ListView每一项时,自动执行
    parent     --- 被单击的ListView
    view       --- 用户操作的那一项
    position   --- 操作的item项在ListView中的位置
    id         --- 被选中的那一行的id


getItemAtPosition(position)  --- 通过position获得和这一行绑定的数据, 本例中只是把改行内容作为title写出来

listView.setOnItemClickListener(listener)   --- 将监听器注册到ListView中


实例代码:

ArrayAdapter与ListView


package com.example.androidbasicdemo1;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ArrayAdapter;
import android.widget.ListView;

/**
 * ArrayList<类型>(context,int itemLayout, data)
 * context:上下文环境
 * itemLayout:自定义的每一项要显示的Layout
 * data:要显示的数据
 * 
 * 例子:
 * ArrayAdapter<String> adapter = new ArrayAdapter<String>(ArrayAdapterListViewActivity.this, android.R.layout.simple_list_item_1, data);
   android.R.layout.simple_list_item_1  --- 使用Android自带的 每一项Listview显示布局   -- 实际应用中常常自定义此item布局

 * @author JayHe
 *
 */
public class ArrayAdapterListViewActivity extends Activity {

	private ListView listView;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_array_adapter_list_view);

		//从xml布局文件中获得ListView对象
		listView = (ListView) findViewById(R.id.arrayadapterlistView1);
		
		//定义要显示的数据
		String[] data = getResources().getStringArray(R.array.items_country);
		//定义适配器
		ArrayAdapter<String> adapter = new ArrayAdapter<String>(ArrayAdapterListViewActivity.this, android.R.layout.simple_list_item_1, data);
		
		//为ListView添加适配器
		listView.setAdapter(adapter);
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		getMenuInflater().inflate(R.menu.array_adapter_list_view, menu);
		return true;
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		int id = item.getItemId();
		if (id == R.id.action_settings) {
			return true;
		}
		return super.onOptionsItemSelected(item);
	}


}



SimpleAdapter与ListView


package com.example.androidbasicdemo1;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.SimpleAdapter;

public class SimpleAdapterListViewActivity extends Activity {

	private List<Map<String, Object>> data;
	
	private ListView listView;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_simple_adapter_list_view);
		
		
		listView = (ListView) findViewById(R.id.simpleadapterlistView1);
		
		SimpleAdapter adapter = new SimpleAdapter(SimpleAdapterListViewActivity.this, prepareData(), R.layout.slef_list_item1,new String[]{"姓名","性别"}, new int[]{R.id.selflistview1textView1,R.id.selflistview1textView2});
		
		listView.setAdapter(adapter);
	
		
		OnItemClickListener listener = new OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView<?> parent, View view, int position,
					long id) {
				setTitle(parent.getItemAtPosition(position).toString());
			}
		};
		
		listView.setOnItemClickListener(listener);

	}

	
	private List<Map<String, Object>> prepareData(){
		data = new ArrayList<Map<String, Object>>();
		Map<String, Object> item;
		item = new HashMap<String, Object>();
		item.put("姓名", "吴欢小盆友");
		item.put("性别", "女");
		data.add(item);
		item = new HashMap<String, Object>();
		item.put("姓名", "冯荣小朋友");
		item.put("性别", "女");
		data.add(item);
		item = new HashMap<String, Object>();
		item.put("姓名", "夏明");
		item.put("性别", "男");
		data.add(item);
		item = new HashMap<String, Object>();
		item.put("姓名", "小华");
		item.put("性别", "男");
		data.add(item);
		return data;
	}
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		getMenuInflater().inflate(R.menu.simple_adapter_list_view, menu);
		return true;
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		int id = item.getItemId();
		if (id == R.id.action_settings) {
			return true;
		}
		return super.onOptionsItemSelected(item);
	}


}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值