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;
}
}
分享到:
相关推荐
适配器(Adapter)是连接ListView和数据源的关键,它负责将数据转换为ListView可以显示的视图。本篇文章将详细介绍Android中ListView的三种适配器:ArrayAdapter、SimpleAdapter以及BaseAdapter的用法。 ### 1. ...
ArrayAdapter和SimpleAdapter是两种常用的ListView适配器,它们帮助我们将数据绑定到ListView的各个视图项上。本篇文章将深入探讨这两种适配器的使用方法、特点以及应用场景。 **ArrayAdapter** ArrayAdapter是...
- 万能适配器通常会包含一个模板方法,允许开发者自定义每个列表项的布局和展示方式,以适应不同类型的数据显示。 - 它可能包含多个数据模型,通过判断数据类型来决定使用哪个模板进行渲染。 - 提供了一些预设的...
在Android开发中,将通过HTTP客户端获取的JSON数据展示到ListView是一种常见的需求,尤其是在构建网络应用时。这个压缩包中的内容可能包含了一个简单的示例项目,演示了如何实现这一功能。下面将详细介绍这个过程...
6. **创建数据适配器**:ListView的工作原理是通过数据适配器(如`BaseAdapter`或`ArrayAdapter`)将数据绑定到视图。你需要创建一个自定义的适配器,继承自`BaseAdapter`,并重写其`getView()`方法来决定每个列表项...
这时,我们可以通过以下方式在ListView中添加一个TextView,显示“暂无数据”: 1. **创建布局**:在XML布局文件中,为ListView添加一个`android:id="@+id/no_data_text"`的TextView,初始状态设置为`android:...
本压缩包“listview适配器 ListViewAdapter和ViewHolder代码.rar”提供了一个简单的使用示例,帮助开发者理解和应用这两个概念。 ListViewAdapter是Android中一个专门用于ListView的适配器类,它充当了数据源和...
这个适配器的设计目标是简化数据绑定和视图更新的过程,使得在处理多种数据源时,只需进行少量的定制化工作。 **1. ListView的工作原理** ListView通过Adapter来连接数据源和视图。Adapter充当桥梁的角色,它负责将...
在Android开发中,ListView是一个非常重要的组件,它用于展示大量数据列表,通常配合适配器(Adapter)使用。本示例“android listView 适配器demo”将详细讲解如何利用适配器机制来动态填充ListView的数据。 首先...
总之,要在PopupWindow中使用ListView显示数据,你需要创建一个包含ListView的布局,初始化PopupWindow,设置数据绑定,最后定位并显示PopupWindow。通过这种方式,你可以在Android应用中提供一个动态、交互式的数据...
"Android ListView 万能适配器"是解决ListView数据绑定的一种高效、灵活的方法,它能够适应多种类型的数据,使得开发者无需为每种不同的数据类型创建单独的Adapter。在本项目中,我们探讨的是一个名为"baseAdapter-...
ArrayAdapter是Android SDK提供的一种基础适配器,它将数据(通常是数组或列表)映射到ListView的各个项。ArrayAdapter简化了数据绑定的过程,允许开发者快速地将数据展示在ListView上。它提供了默认的视图创建和...
适配器的作用是将数据绑定到ListView的各个视图上,因此优化适配器的实现至关重要。 1. 数据分页加载(Lazy Loading):而不是一次性加载所有数据,我们可以实现滚动监听,只在用户滚动到列表的边缘时才加载下一...
总结,BaseAdapter是Android ListView适配器的核心,通过自定义BaseAdapter,我们可以灵活地控制ListView中item的显示,实现复杂的数据绑定和视图定制。在实际开发中,理解并掌握BaseAdapter的工作原理和优化技巧,...
本资料包"安卓listview相关相关-listview适配器优化重用.rar"可能包含了一些关于如何优化ListView适配器以实现重用机制的示例代码。 1. **ListView的工作原理** - ListView通过一个名为Adapter的数据绑定组件来...
在Android开发中,ListView和GridView是两种非常常用的控件,它们用于展示大量数据集合,而适配器(Adapter)则是连接数据源与视图的关键组件。在这个主题中,我们将深入探讨ListView和GridView的万能适配器,以及...
通过这种方式,我们不仅可以实现ListView的通用适配器,还可以将其扩展到其他的列表组件,如RecyclerView,因为它们的核心机制都是Adapter和ViewHolder。这种抽象和复用的思想是面向对象编程中的重要原则,能够使...
在Android开发中,ListView是一种非常常见且重要的控件,它被广泛用于显示大量的数据视图,尤其是在处理数据库数据时。ListView允许用户滚动查看多个条目,优化内存使用,提高用户体验。本节将深入探讨如何使用...
ListView通过适配器(Adapter)与数据源进行绑定,适配器的作用是将数据转化为ListView可以显示的视图。SimpleAdapter就是这样一个适配器,它简化了数据绑定的过程,适用于简单的数据结构,如字符串数组或者键值对...
在Android开发中,ListView是广泛使用的控件,用于展示大量数据列表。为了使ListView能够灵活地显示...通过以上步骤,我们可以创建一个适应性强、可复用的ListView适配器,满足各种需求,提高代码的可维护性和效率。