`

ListView的数据显示,三种适配器绑定方式

阅读更多

public void OnCreate(){
	...
	listView=(ListView)findViewById(R.id.listview);
	//点击条目的事件
	listView.setOnItemClickListener(listener);
	show3();
}

//点击条目的事件
private final class ItemClickListener implements OnItemClickListener{
	public void OnItemClick(AdapterView<?>parent,View view,int position,long id){
		ListView lv=(ListView)parent;
		//Person p=(Person)lv.getItemAtPosition(position);//调用自定义适配器,返回Person
		Cursor cursor=(Cursor)lv.getItemAtPosition(position);//SimpleCursorAdapter适配器
		Toast.makeText(getApplicationContext(),p.Name,1).show();
	}
}
//SimpleAdapter适配器
private void show(){
	List<Person> persons=...;
	List<HashMap<String,Object>> data=new ArrayList<HashMap<String,Object>>();
	for(Person p : persons){
		HashMap<String,Object> item=new HashMap<String,Object>();
		item.put("name",p.Name);
		item.put("phone",p.Phone);
		data.add(item);
	}
	SimpleAdapter adapter=new SimpleAdapter(this,data,R.layout.viewitem,
	new String[]{"name","phone"},new int[]{R.id.name,R.id.phone});
	listview.setAdapter(adapter);
	/*int total=adapter.getCount();
	int perpage=7;
	for(int i=0;i<perpage;i++){
		View view=adapter.getView(i,convertView,parent);
	}*/
}
//SimpleCursorAdapter适配器
private void show2(){
	SimpleCursorAdapter adapter=new SimpleCursorAdapter(this,R.layout.viewitem,Cursor 对象,
	new String[]{"name","phone"},new int[]{R.id.name,R.id.phone});
	listview.setAdapter(adapter)
}
//自定义适配器
private void show3(){
	List<Person> persons=...
	PersonAdapter adapter=new PersonAdapter(this,persons,R.layout.viewitem);
	listView.setAdapter(adapter);
}

自定义适配器
public class PersonAdapter extends BaseAdapter{
	privte List<Person> persons;//要绑定的数据
	private int resource;//绑定的条目的界面
	LayoutInflater inflater;//布局填充器。生成所对应的view对象,系统内置
	public PersonAdapter(Context context,List<Person> persons,int resource){
		this.persons=persons;
		this.resource=resource;
		//取得系统内置的布局填充器
		inflater=context.getSystemService(Context.LAYOUT_INFLATER_SERVICE)
	}
	public int getCount(){
	//得到要显示数据的总数
	return persons.size();
	}
	public Object getItem(int position){
		//取得索引位置的值
		return persons.get(position);
	}
	public long getItemId(int position){
	//取得索引号
		return position;
	}
	public View getView(int position,View convertView,ViewGroup parent){
		TextView name=null;
		TextView phone=null;
		//取得条目的界面
		if(convertView==null){
			//第一页.不为null则重用它。不然每一次都生成一个view对象,则损耗性能
			inflater.inflate(resource,null);//生成条目界面对象
			 name=convertView.findViewById(R.id.name);
			 phone=convertView.findViewById(R.id.phone);
			ViewCache cache=new ViewCache();
			cache.nameView=name;
			cache.phoneView=phone;
			convertView.setTag(cache);//标志,把缓存放进去。取得标志就可以取得缓存对象
			
		}else{//不用去查找,重用以前生成的view
			ViewCache cache=(ViewCache)convertView.getTag();
			name=cache.nameView;
			phone=cache.phoneView;
		}
		Person person=persons.get(position);
		//数据绑定
		name.setText(person.Name);
		phone.setText(person.Phone);
		return converView;
	}
	
	//性能优化:
	//每显示一个条目,都会调用getView方法,如果每次都去查找显示控件,那影响性能
	//定义一个内部类,用来缓存视图
	private final class ViewCache{
		public TextView nameView;//get,set更耗内存
		public TextView phoneView;
	}
}


 


 

分享到:
评论

相关推荐

    AndroidListView的三种适配器用法

    适配器(Adapter)是连接ListView和数据源的关键,它负责将数据转换为ListView可以显示的视图。本篇文章将详细介绍Android中ListView的三种适配器:ArrayAdapter、SimpleAdapter以及BaseAdapter的用法。 ### 1. ...

    Android中ListView常用的两种适配器ArrayAdapter和SimpleAdapter使用

    ArrayAdapter和SimpleAdapter是两种常用的ListView适配器,它们帮助我们将数据绑定到ListView的各个视图项上。本篇文章将深入探讨这两种适配器的使用方法、特点以及应用场景。 **ArrayAdapter** ArrayAdapter是...

    android之listview万能适配器

    - 万能适配器通常会包含一个模板方法,允许开发者自定义每个列表项的布局和展示方式,以适应不同类型的数据显示。 - 它可能包含多个数据模型,通过判断数据类型来决定使用哪个模板进行渲染。 - 提供了一些预设的...

    Android代码-通过httpclient获取到JSON数据展示到ListView.zip

    在Android开发中,将通过HTTP客户端获取的JSON数据展示到ListView是一种常见的需求,尤其是在构建网络应用时。这个压缩包中的内容可能包含了一个简单的示例项目,演示了如何实现这一功能。下面将详细介绍这个过程...

    Android用listview显示数据库中的数据

    6. **创建数据适配器**:ListView的工作原理是通过数据适配器(如`BaseAdapter`或`ArrayAdapter`)将数据绑定到视图。你需要创建一个自定义的适配器,继承自`BaseAdapter`,并重写其`getView()`方法来决定每个列表项...

    ListView绑定数据和设置ListView无数据的时候显示TextView暂无数据

    这时,我们可以通过以下方式在ListView中添加一个TextView,显示“暂无数据”: 1. **创建布局**:在XML布局文件中,为ListView添加一个`android:id="@+id/no_data_text"`的TextView,初始状态设置为`android:...

    listview适配器 ListViewAdapter和ViewHolder代码.rar

    本压缩包“listview适配器 ListViewAdapter和ViewHolder代码.rar”提供了一个简单的使用示例,帮助开发者理解和应用这两个概念。 ListViewAdapter是Android中一个专门用于ListView的适配器类,它充当了数据源和...

    ListView的万能适配器

    这个适配器的设计目标是简化数据绑定和视图更新的过程,使得在处理多种数据源时,只需进行少量的定制化工作。 **1. ListView的工作原理** ListView通过Adapter来连接数据源和视图。Adapter充当桥梁的角色,它负责将...

    android listView 适配器demo

    在Android开发中,ListView是一个非常重要的组件,它用于展示大量数据列表,通常配合适配器(Adapter)使用。本示例“android listView 适配器demo”将详细讲解如何利用适配器机制来动态填充ListView的数据。 首先...

    popupwindow中用listView绑定数据并显示在View上方

    总之,要在PopupWindow中使用ListView显示数据,你需要创建一个包含ListView的布局,初始化PopupWindow,设置数据绑定,最后定位并显示PopupWindow。通过这种方式,你可以在Android应用中提供一个动态、交互式的数据...

    Android ListView 万能适配器

    "Android ListView 万能适配器"是解决ListView数据绑定的一种高效、灵活的方法,它能够适应多种类型的数据,使得开发者无需为每种不同的数据类型创建单独的Adapter。在本项目中,我们探讨的是一个名为"baseAdapter-...

    ListView使用ArrayAdapter适配器

    ArrayAdapter是Android SDK提供的一种基础适配器,它将数据(通常是数组或列表)映射到ListView的各个项。ArrayAdapter简化了数据绑定的过程,允许开发者快速地将数据展示在ListView上。它提供了默认的视图创建和...

    ListView快速显示100万条数据用时1秒

    适配器的作用是将数据绑定到ListView的各个视图上,因此优化适配器的实现至关重要。 1. 数据分页加载(Lazy Loading):而不是一次性加载所有数据,我们可以实现滚动监听,只在用户滚动到列表的边缘时才加载下一...

    android listview常用适配器

    总结,BaseAdapter是Android ListView适配器的核心,通过自定义BaseAdapter,我们可以灵活地控制ListView中item的显示,实现复杂的数据绑定和视图定制。在实际开发中,理解并掌握BaseAdapter的工作原理和优化技巧,...

    安卓listview相关相关-listview适配器优化重用.rar

    本资料包"安卓listview相关相关-listview适配器优化重用.rar"可能包含了一些关于如何优化ListView适配器以实现重用机制的示例代码。 1. **ListView的工作原理** - ListView通过一个名为Adapter的数据绑定组件来...

    ListView GridView 万能的适配器

    在Android开发中,ListView和GridView是两种非常常用的控件,它们用于展示大量数据集合,而适配器(Adapter)则是连接数据源与视图的关键组件。在这个主题中,我们将深入探讨ListView和GridView的万能适配器,以及...

    android打造listview通用适配器

    通过这种方式,我们不仅可以实现ListView的通用适配器,还可以将其扩展到其他的列表组件,如RecyclerView,因为它们的核心机制都是Adapter和ViewHolder。这种抽象和复用的思想是面向对象编程中的重要原则,能够使...

    ListView显示数据视图

    在Android开发中,ListView是一种非常常见且重要的控件,它被广泛用于显示大量的数据视图,尤其是在处理数据库数据时。ListView允许用户滚动查看多个条目,优化内存使用,提高用户体验。本节将深入探讨如何使用...

    ListView【通用】SimpleAdapter适配器

    ListView通过适配器(Adapter)与数据源进行绑定,适配器的作用是将数据转化为ListView可以显示的视图。SimpleAdapter就是这样一个适配器,它简化了数据绑定的过程,适用于简单的数据结构,如字符串数组或者键值对...

    打造listview万用适配器

    在Android开发中,ListView是广泛使用的控件,用于展示大量数据列表。为了使ListView能够灵活地显示...通过以上步骤,我们可以创建一个适应性强、可复用的ListView适配器,满足各种需求,提高代码的可维护性和效率。

Global site tag (gtag.js) - Google Analytics