三种Adapter构建ListView
ListView添加条目的时候, 可以使用setAdapter(ListAdapter)方法
BaseAdapter: 定义一个类继承BaseAdapter, 重写4个抽象方法, ListView的条目是由getView()方法构建出来的
SimpleAdapter: 创建SimpleAdapter对象时, 传入数据(List<Map<String, ?>>), 并指定数据的绑定关系
SimpleCursorAdapter: 创建SimpleCursorAdapter对象时, 传入一个Cursor, 指定数据的绑定关系
监听ListView的点击
调用ListView.setOnItemClickListener(OnItemClickListener)方法注册一个OnItemClickListener
在OnItemClickListener的onItemClick()方法中使用 parent.getItemAtPosition(position) 方法可以获取指定条目上的数据
BaseAdapter: 返回的就是自定义的getItem()方法中返回的数据
SimpleAdapter: 返回的是一个Map, 就是创建SimpleAdapter时List中的一个Map
SimpleCursorAdapter: 返回的是一个Cursor, 这个Cursor就是创建时传入的Cursor, 但是已经通过moveToPosition()方法指定到点击的索引了
3.通俗的说,数据适配器就是填充ListView的方式。
---------------------------------------------------
布局文件
```java
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<ListView
android:id="@+id/listview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/>
</RelativeLayout>
```
javabean------------------------------------------------------
```java
package com.example.a030202_baseadapter;
public class Student {
private String name;
private Integer age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public Student(String name, Integer age) {
super();
this.name = name;
this.age = age;
}
public void setAge(Integer age) {
this.age = age;
}
}
```
java代码----------------------------------------------------------
```java
package com.example.a030202_baseadapter;
import java.util.ArrayList;
import java.util.List;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;
public class MainActivity extends Activity {
// 存放Student对象的集合,Student是一个javabean
private List<Student> list;
private ListView lv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 一创建Activity就进行初始化
init();
}
// 初始化的方法
public void init() {
// 获得ListView
lv = (ListView) findViewById(R.id.listview);
// 想list中添加一些数据
list = new ArrayList<Student>();
for (int i = 0; i < 13; i++) {
list.add(new Student("lisi" + i, 33 + i));
}
// 为ListView设置数据适配器
lv.setAdapter(new MyAdapter());
}
// 自定义数据适配器,继承BaseAdapter类
class MyAdapter extends BaseAdapter {
// 重写未实现的方法
// 一个只能存放一个学生信息的布局文件,可复用该布局文件
@Override
public View getView(int position, View convertView, ViewGroup parent) {
/*
* int position,当前到哪个记录了,下标从0开始.向item布局文件中填写的那个数据 View
* convertView,可以理解为一个缓存
* ,当ListView显示的数据满屏后,如果想通过上下滚动方式再显示数据,就需要用到该convertView
* ,可以理解为一个缓存,用于暂时存放数据 ViewGroup parent,该View的父类
*/
View view = null;
Student stu = list.get(position);
// 缓存为0,表示屏幕中的item还没有填充满
if (convertView == null) {
// 如果没有填充满,那么就直接调用下面的方法,该方法可以把一个布局文件转为一个View对象
view = getLayoutInflater().inflate(R.layout.item, null);
} else {
// 如果屏幕中已经填充满了,还想要继续显示没有显示出来的数据,也就是上下滚动的时候,就需要用到缓存,将缓存赋值给view。
view = convertView;
}
// 获得view下的两个TextView,并对其进行设值
TextView tv_name = (TextView) view.findViewById(R.id.name);
TextView tv_age = (TextView) view.findViewById(R.id.age);
tv_name.setText(stu.getName());
tv_age.setText(String.valueOf(stu.getAge()));
return view;
}
// 获得一共有多少记录
@Override
public int getCount() {
// TODO Auto-generated method stub
return list.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}
}
}
ListView添加条目的时候, 可以使用setAdapter(ListAdapter)方法
BaseAdapter: 定义一个类继承BaseAdapter, 重写4个抽象方法, ListView的条目是由getView()方法构建出来的
SimpleAdapter: 创建SimpleAdapter对象时, 传入数据(List<Map<String, ?>>), 并指定数据的绑定关系
SimpleCursorAdapter: 创建SimpleCursorAdapter对象时, 传入一个Cursor, 指定数据的绑定关系
监听ListView的点击
调用ListView.setOnItemClickListener(OnItemClickListener)方法注册一个OnItemClickListener
在OnItemClickListener的onItemClick()方法中使用 parent.getItemAtPosition(position) 方法可以获取指定条目上的数据
BaseAdapter: 返回的就是自定义的getItem()方法中返回的数据
SimpleAdapter: 返回的是一个Map, 就是创建SimpleAdapter时List中的一个Map
SimpleCursorAdapter: 返回的是一个Cursor, 这个Cursor就是创建时传入的Cursor, 但是已经通过moveToPosition()方法指定到点击的索引了
3.通俗的说,数据适配器就是填充ListView的方式。
---------------------------------------------------
布局文件
```java
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<ListView
android:id="@+id/listview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/>
</RelativeLayout>
```
javabean------------------------------------------------------
```java
package com.example.a030202_baseadapter;
public class Student {
private String name;
private Integer age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public Student(String name, Integer age) {
super();
this.name = name;
this.age = age;
}
public void setAge(Integer age) {
this.age = age;
}
}
```
java代码----------------------------------------------------------
```java
package com.example.a030202_baseadapter;
import java.util.ArrayList;
import java.util.List;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;
public class MainActivity extends Activity {
// 存放Student对象的集合,Student是一个javabean
private List<Student> list;
private ListView lv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 一创建Activity就进行初始化
init();
}
// 初始化的方法
public void init() {
// 获得ListView
lv = (ListView) findViewById(R.id.listview);
// 想list中添加一些数据
list = new ArrayList<Student>();
for (int i = 0; i < 13; i++) {
list.add(new Student("lisi" + i, 33 + i));
}
// 为ListView设置数据适配器
lv.setAdapter(new MyAdapter());
}
// 自定义数据适配器,继承BaseAdapter类
class MyAdapter extends BaseAdapter {
// 重写未实现的方法
// 一个只能存放一个学生信息的布局文件,可复用该布局文件
@Override
public View getView(int position, View convertView, ViewGroup parent) {
/*
* int position,当前到哪个记录了,下标从0开始.向item布局文件中填写的那个数据 View
* convertView,可以理解为一个缓存
* ,当ListView显示的数据满屏后,如果想通过上下滚动方式再显示数据,就需要用到该convertView
* ,可以理解为一个缓存,用于暂时存放数据 ViewGroup parent,该View的父类
*/
View view = null;
Student stu = list.get(position);
// 缓存为0,表示屏幕中的item还没有填充满
if (convertView == null) {
// 如果没有填充满,那么就直接调用下面的方法,该方法可以把一个布局文件转为一个View对象
view = getLayoutInflater().inflate(R.layout.item, null);
} else {
// 如果屏幕中已经填充满了,还想要继续显示没有显示出来的数据,也就是上下滚动的时候,就需要用到缓存,将缓存赋值给view。
view = convertView;
}
// 获得view下的两个TextView,并对其进行设值
TextView tv_name = (TextView) view.findViewById(R.id.name);
TextView tv_age = (TextView) view.findViewById(R.id.age);
tv_name.setText(stu.getName());
tv_age.setText(String.valueOf(stu.getAge()));
return view;
}
// 获得一共有多少记录
@Override
public int getCount() {
// TODO Auto-generated method stub
return list.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}
}
}
```[/mw_shl_code]
本文由上海it培训机构推荐阅读,更多精彩请浏览上海java培训官网。