要学习ListView,首先应该掌握适配器,那么什么是适配器呢?
适配器就是在安卓中,把数据变成符合界面风格的形式,并且通过ListView显示出来。也就是说适配器是数据和界面之间的桥梁。
今天我们主要讲三种适配器:
1.ArrayAdapter:简单的数据映射,只包含文字数据。
2.SimpleAdapter:文字和图片映射,内容相对丰富了一丢丢。
3.自定义的Adapter:无所不能,瓶颈在于你自己的水平。
对于前两种,Android内部已经封装好,比如你想点击一项ListView的某一行的某一个控件,前两个精度在于某一行,而自定义的可以精确到某一行的某一个控件。不过第三种要求自己定义,会比较麻烦,功能不太复杂时,前两种可以直接使用。(当然adapter不止这三种)
1.ArrayAdapter:
任务:把数组里的数据映射到ListView中,点击listView的每一行,都会显示所点击的行的数据;
第一步:当然要在xml文件中定义ListView了,代码如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="ArrayAdapter ListView test..." />
<ListView
android:id="@+id/simpleListViewControll"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
第二步:建立activity文件,用adapter把数据更改为能被界面显示的数据,然后用ListView读取并显示。
package cn.edu.qtech.csc.lcb.listviewdemo;
import android.os.Bundle;
import android.app.Activity;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.List;
public class ArrayAdapterActivity extends Activity {
//定义ListView对象变量---View
private ListView listview;
//存放数据的List<String>对象---Model
private List<String> list;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_array_adapter);
//获取ListView对象
listview=(ListView)findViewById(R.id.simpleListViewControll);
//定义List变量(提供数据)--ArrayList是List的具体实现
list=new ArrayList<String>();
//添加数据内容
list.add("测试数据--1");
list.add("测试数据--2");
list.add("测试数据--3");
list.add("测试数据--4");
list.add("测试数据--5");
list.add("测试数据--6");
list.add("测试数据--7");
list.add("测试数据--8");
list.add("测试数据--9");
//定义ArrayAdapter,衔接ListView和List---Controller
//参数-----上下文环境, ListView的每一行的布局, List<String>对象
//如果要使用自定义的布局,必须指明TextView的ID--布局中也可以包含除TextView之外的其它控件
ArrayAdapter<String> adapter=new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, list);
//ArrayAdapter<String> adapter=new ArrayAdapter<String>(this, R.layout.test, R.id._id, list);
//设置ListView的Adapter对象
listview.setAdapter(adapter);
listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//parent--ListView
// view--一行
//position--适配器中的序号
// id--row id, ListView中的序号,从0开始编号
//大部分情况下(如:ArrayAdapter 和 SimpleAdapter 中,两者是一样的),position和id相同
//但是,有些情况(如SimpleCursorAdapter中),row id是数据库中的_id字段的值,与position不同
String info=list.get(position) + " was clicked!"; //取出点击的行的内容
Toast.makeText(ArrayAdapterActivity.this, info+"--"+id, Toast.LENGTH_SHORT).show();
}
});
}
}
小伙伴有没有发现注释了一行,ArrayAdapter虽然不能控制对于行的操作,但是可以控制每一行的格式,其中android.R.layout.simple_list_item_1是一个Android的内置文件,只用于显示一段文字,如果自定义格式的话,记得一定要包含TextView,并且让他们对应起来