Android ListView绑定数据
ListView绑定数据的三层:
ListView绑定数据源从逻辑上可以分为三层:UI层,逻辑层,数据层。
- UI层:UI层即是ListView控件。
- 数据层:要展示到ListView控件上面的数据。
- 逻辑层:Adapter的功能是将数据源通过Adapter内部定义的逻辑绑定到ListView控件。
ListView绑定数据相关的组件介绍:
- ListView控件:是一个列表控件,主要用来承载列表中的每个控件
- item layout resource:用来定义ListView中每个Item的样式。
- Adapter:用来将数据源绑定到ListView控件,并可以实现控件的利用。
ListView数据源绑定方式
- ArrayAdapter
- SimpleAdapter
- Custom Adapter
ArrayAdapter
这种绑定方式比较简单直接绑定即可,代码如下:
listViewListAdapter.setAdapter((ListAdapter) arrayAdapter());
private Adapter ArrayAdapter(){
List data = new ArrayList();
data.add("1");
data.add("2");
data.add("3");
data.add("4");
return new ArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1,data)
}
SimpleAdapter
listViewPersons.setAdapter((ListAdapter)simpleAdapter(getSampleData()));
private Adapter simpleAdapter(List list){
List<HashMap<String,Object>> data=new ArrayList<HashMap<String, Object>>();
for (Person person:list){
HashMap<String,Object> item=new HashMap<>();
item.put("name",person.getName());
item.put("sex",person.getSex());
item.put("age",person.getAge());
item.put("address",person.getAddress());
data.add(item);
}
SimpleAdapter simpleAdapter=new SimpleAdapter(getApplicationContext(),data,R.layout.item,new String[]{"name","sex","age","address"},new int[]{R.id.textViewName,R.id.textViewSex,R.id.textViewAge,R.id.textViewAddress});
return simpleAdapter;
}
Custom Adapter
public class Person {
private String name;
private String sex;
private String age;
private String address;
public Person(String name, String sex, String age, String address) {
this.name = name;
this.sex = sex;
this.age = age;
this.address = address;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
public class PersonAdapter extends BaseAdapter {
private List persons;
private int resource;
private LayoutInflater inflater;
public PersonAdapter(Context context,List<Person> persons, int resource){
this.persons=persons;
this.resource=resource;
inflater=(LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
return persons.size();
}
@Override
public Object getItem(int position) {
return persons.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
TextView textViewName=null;
TextView textViewSex=null;
TextView textViewAge=null;
TextView textViewAddress=null;
if(convertView==null){
convertView=inflater.inflate(resource,null);
textViewName=(TextView)convertView.findViewById(R.id.textViewName);
textViewSex=(TextView)convertView.findViewById(R.id.textViewSex);
textViewAge=(TextView)convertView.findViewById(R.id.textViewAge);
textViewAddress=(TextView)convertView.findViewById(R.id.textViewAddress);
ViewCache viewCache=new ViewCache();
viewCache.setTextViewName(textViewName);
viewCache.setTextViewSex(textViewSex);
viewCache.setTextViewAge(textViewAge);
viewCache.setTextViewAddress(textViewAddress);
convertView.setTag(viewCache);
}else{
ViewCache viewCache=(ViewCache)convertView.getTag();
textViewName=viewCache.getTextViewName();
textViewSex=viewCache.getTextViewSex();
textViewAge=viewCache.getTextViewAge();
textViewAddress=viewCache.getTextViewAddress();
}
Person person=persons.get(position);
textViewName.setText(person.getName());
textViewSex.setText(person.getSex());
textViewAge.setText(person.getAge());
textViewAddress.setText(person.getAddress());
return convertView;
}
public class ViewCache{
private TextView textViewName;
private TextView textViewSex;
private TextView textViewAge;
private TextView textViewAddress;
public TextView getTextViewName() {
return textViewName;
}
public void setTextViewName(TextView textViewName) {
this.textViewName = textViewName;
}
public TextView getTextViewSex() {
return textViewSex;
}
public void setTextViewSex(TextView textViewSex) {
this.textViewSex = textViewSex;
}
public TextView getTextViewAge() {
return textViewAge;
}
public void setTextViewAge(TextView textViewAge) {
this.textViewAge = textViewAge;
}
public TextView getTextViewAddress() {
return textViewAddress;
}
public void setTextViewAddress(TextView textViewAddress) {
this.textViewAddress = textViewAddress;
}
}
}
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listViewPersons.setAdapter((ListAdapter) customAdapter(getSampleData()));
}
private Adapter customAdapter(List<Person> list){
PersonAdapter personAdapter=new PersonAdapter(getApplicationContext(),list,R.layout.item);
return personAdapter;
}
}
Sample data
private List getSampleData(){
List persons=new ArrayList();
persons.add(new Person("萧峰","男","32","大辽"));
persons.add(new Person("阿朱","女","16","江南"));
persons.add(new Person("段誉","男","22","大理"));
persons.add(new Person("王语嫣","女","18","江南"));
persons.add(new Person("虚竹","男","24","河南"));
persons.add(new Person("梦姑","女","20","西夏"));
return persons;
}
Android ListView绑定数据的更多相关文章
- xamarin.android listview绑定数据及点击事件
前言 listview是用来显示数据列表的一个控件,今天给大家带来如何使用cursor进行数据绑定以及点击事件. 导读 1.如何创建一个listview 2.如何使用cursor进行绑定数据 3.li ...
- AlertDialog中使用ListView绑定数据
在实际工作过程中,单单使用AlertDialog的单选功能不一定能满足我们的需求,需要绑定数据到 listview 1. 自定义Layout LayoutInflater factory = Layo ...
- Xamarin.Android 使用ListView绑定数据
使用ListView进行数据绑定 第一步:新建一个类,用于存储显示字段. namespace ListViewDataBIndDemo { public class Person { public i ...
- android ListView列表显示数据
item.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:and ...
- android ListView内数据的动态添加与删除
main.xml 文件: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns ...
- android listview 添加数据
<span style="white-space:pre"> </span>listView = (ListView) findViewById(R.id. ...
- Android之ListView性能优化——一行代码绑定数据——万能适配器
如下图,加入现在有一个这样的需求图,你会怎么做?作为一个初学者,之前我都是直接用SimpleAdapter结合一个Item的布局来实现的,感觉这样实现起来很方便(基本上一行代码就可以实现),而且也没有 ...
- 使用自定的Adapter绑定ListView/GridView数据
使用自定的Adapter绑定ListView/GridView数据(地址) 对于ListView/Gridview的数据绑定, google提供了一些Adapter的模板, 自己也可以自定义一些个性化 ...
- Android ListView异步加载数据
1.主Activity public class MainActivity extends Activity { private ListView listView; private ArrayLis ...
随机推荐
- 启用Mac系统读写NFTS磁盘
从Mac OSX 10.6系统开始苹果系统已经内置对NTFS写入功能,但苹果没有公开说明,而且在默认状态下是没有开启的.SL-NTFS是一款Mac上的小工具,它可以直接为你的Mac增加NTFS的写入权 ...
- Cookie对象的特点
1.存储少量不重要的数据2.存储在客户端的文本文件中(必须设置有效期,否则不被存储)3.安全性差4.存储的数据类型--字符串5.浏览器窗口无关,但与访问的站点相关6.具体特定的过期时间和日期7.在客户 ...
- Num 15: NYOJ: 题目0002 : 括号配对问题 [ 栈(stack) ]
原题连接 首先要了解有关栈的一些基本知识,即: 什么是栈,栈有什么作用: 1.什么是栈: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkb ...
- vuex资料
vuex最简单.最详细的入门文档 链接:https://segmentfault.com/a/1190000009404727 https://www.jb51.net/article/138239. ...
- java UDP聊天与文件传输
package rgy.com.UDP3; import java.awt.Font; import java.awt.GridLayout; import java.awt.event.Action ...
- 在对象内部尽量直接訪问实例变量 --Effictive Objective-C 抄书
在对象之外訪问实例变量时,应该总是通过属性来做.在那么在对象内部訪问实例变量的时候,又该怎样呢? 这是 OCer们一直激烈讨论的问题.有人觉得,不管什么情况,都应该通过属性来訪问实例变量;也有人说,& ...
- Deferred Rendering(二)G-Buffer的组织
先来看一张网上广为流传的<杀戮地带2>典型的Deferred Shading的G-Buffer组织: 这里补充解释下几个点: 不存Position,而由depth和屏幕像素坐标反推出来.參 ...
- Msql入门实战之下
前面一章主要解说了mysql的select的使用方法.将select的大部分使用方法进行分别解说.本章主要解说Msql约束表的建立,以及存储过程的实现,附带其它介绍.临时就算入门了,Mysql索引之后 ...
- HTML <iframe> 标签的 src 属性
HTML <iframe> 标签的 src 属性 <iframe src="/index.html"> <p>Your browser does ...
- ios20--xib2
故事板控制器: // // ViewController.m // 03-通过xib自定义商品的View #import "ViewController.h" #import &q ...