ListView绑定数据的三层:

ListView绑定数据源从逻辑上可以分为三层:UI层,逻辑层,数据层。

  1. UI层:UI层即是ListView控件。
  2. 数据层:要展示到ListView控件上面的数据。
  3. 逻辑层: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绑定数据的更多相关文章

  1. xamarin.android listview绑定数据及点击事件

    前言 listview是用来显示数据列表的一个控件,今天给大家带来如何使用cursor进行数据绑定以及点击事件. 导读 1.如何创建一个listview 2.如何使用cursor进行绑定数据 3.li ...

  2. AlertDialog中使用ListView绑定数据

    在实际工作过程中,单单使用AlertDialog的单选功能不一定能满足我们的需求,需要绑定数据到 listview 1. 自定义Layout LayoutInflater factory = Layo ...

  3. Xamarin.Android 使用ListView绑定数据

    使用ListView进行数据绑定 第一步:新建一个类,用于存储显示字段. namespace ListViewDataBIndDemo { public class Person { public i ...

  4. android ListView列表显示数据

    item.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:and ...

  5. android ListView内数据的动态添加与删除

    main.xml 文件: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns ...

  6. android listview 添加数据

    <span style="white-space:pre"> </span>listView = (ListView) findViewById(R.id. ...

  7. Android之ListView性能优化——一行代码绑定数据——万能适配器

    如下图,加入现在有一个这样的需求图,你会怎么做?作为一个初学者,之前我都是直接用SimpleAdapter结合一个Item的布局来实现的,感觉这样实现起来很方便(基本上一行代码就可以实现),而且也没有 ...

  8. 使用自定的Adapter绑定ListView/GridView数据

    使用自定的Adapter绑定ListView/GridView数据(地址) 对于ListView/Gridview的数据绑定, google提供了一些Adapter的模板, 自己也可以自定义一些个性化 ...

  9. Android ListView异步加载数据

    1.主Activity public class MainActivity extends Activity { private ListView listView; private ArrayLis ...

随机推荐

  1. Django学习系列之模板系统

    一.模板标签 if/else {%  if  %}标签检查一个变量的值是否为真或者等于另外一个值,如果为真,系统会执行{%  if  %}和{%  endif  %}之间的代码块,例如: {% if ...

  2. 如何以正确的顺序重新安装驱动程序 | Dell 中国

      购买 支持 社区 我的帐户     购买 支持 社区   如何以正确的顺序重新安装驱动程序 在戴尔笔记本电脑或台式机上手动重新安装Microsoft Windows操作系统后,您还必须以正确的顺序 ...

  3. java入门之——对象转型

    对象的类型转换是我们在编程的时候常常会遇到的,java平台也是如此.比方一些基本类型的数据转型和复合数据的转换. 举例 java语言中主要分为向上转型和向下转型,怎样来了解和掌握这两者转型的关系呢?首 ...

  4. poj 2728 最优比例生成树(01分数规划)模板

    /* 迭代法 :204Ms */ #include<stdio.h> #include<string.h> #include<math.h> #define N 1 ...

  5. ogg 传输进程启动报错 Missing filename opening checkpoint file.

    GGSCI (hosta) 48> view report dpfull ************************************************************ ...

  6. 动态生成页面(一)——ASP.NET中Literal使用

    在页面中加入内容时,假设是静态内容.无需使用容器,能够直接将标记作为HTML直接加入到页面中:可是,假设是动态内容,则必须借助容器将内容加入到页面中.典型的容器有:Label控件.Literal控件. ...

  7. WWDC笔记:2013 Session 201 Building User Interfaces for iOS 7

    Text Dynamic Type Specifies fonts semantically Supports user text sizing Optimized for legibility Su ...

  8. 展开阅读全文 js 爬虫操作

    from selenium import webdriver import time import random from bs4 import * browser = webdriver.Chrom ...

  9. 关于The hierarchy of the type TestBeforeAdvice is inconsistent的问题

    今天准备写一个spring aop的demo,创建了TestBeforeAdvice类,该类实现了MethodBeforeAdvice接口,eclipse报了"The hierarchy o ...

  10. 呐喊-Skrik

    尼斯,1892年1月22日,我和两个朋友还在散步,太阳已快下山了,天空突然间变得血一样红,我似乎感受到了一种悲伤忧郁的气息,我止住了脚步,轻轻地倚在篱笆边,极度的疲倦已使我快要窒息了.火焰般的云彩像血 ...