一、SimpleAdapter 简要说明
public SimpleAdapter (Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to)
官方说明了其各个参数含义,我这里根据自己的理解解释下:
第一个context,很明显大家根据英文可以知道是上下文的意思,它官方的意思是:SimpleAdapter所要运行关联到的视图,这个是什么呢?就是你这个SimpleAdapter所在的Activity(一般而言),所以这个参数一般是this
第二个是一个泛型只要是一个List就行,这一般会想到是ArrayList,而他内部存储的则是Map或者继承自Map的对象,比如HashMap,这些语法都是Java的基本语法,不再详述了!这里呢是作为数据源,而且每一个ArraList中的一行就代表着呈现出来的一行,Map的键就是这一行的列名,值也是有列名的。
第三个资源文件,就是说要加载这个两列所需要的视图资源文件,你可以左边一个TextView右边一个TextView,目的在于呈现左右两列的值!
第四个参数是一个数组,主要是将Map对象中的名称映射到列名,一一对应
第五个是将第四个参数的值一一对象的显示(一一对应)在接下来的int形的id数组中,这个id数组就是LayOut的xml文件中命名id形成的唯一的int型标识符
一、SimpleAdapter实例,Android 显示安装程序列表
XML文件 infos.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ListView android:layout_height="wrap_content" android:layout_width="match_parent" android:id="@+id/itemlist"></ListView>
</LinearLayout>
XML文件 info_row.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView android:text="TextView" android:id="@+id/name" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
<TextView android:text="TextView" android:id="@+id/desc" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
</LinearLayout>
java文件
package cf.Test;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.pm.ApplicationInfo;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.widget.ListView;
import android.widget.SimpleAdapter;
public class software extends Activity implements Runnable {
List<Map<String, Object>> list = null;
ListView itemlist = null;
private ProgressDialog pd;
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.infos);
setTitle("软件信息");
itemlist = (ListView) findViewById(R.id.itemlist);
pd = ProgressDialog.show(this, "请稍候..", "正在收集你已经安装的软件信息...", true,
false);
Thread thread = new Thread(this);
thread.start();
}
private void refreshListItems() {
list = fetch_installed_apps();
SimpleAdapter notes = new SimpleAdapter(this, list, R.layout.info_row,
new String[] { "name", "desc" }, new int[] { R.id.name,
R.id.desc });
itemlist.setAdapter(notes);
setTitle("软件信息,已经安装"+list.size()+"款应用.");
}
public List fetch_installed_apps(){
List<ApplicationInfo> packages = getPackageManager().getInstalledApplications(0);
list = new ArrayList<Map<String, Object>>(
packages.size());
Iterator<ApplicationInfo> l = packages.iterator();
while (l.hasNext()) {
Map<String, Object> map = new HashMap<String, Object>();
ApplicationInfo app = (ApplicationInfo) l.next();
String packageName = app.packageName;
String label = "";
try {
label = getPackageManager().getApplicationLabel(app).toString();
} catch (Exception e) {
Log.i("Exception",e.toString());
}
map = new HashMap<String, Object>();
map.put("name", label);
map.put("desc", packageName);
list.add(map);
}
return list;
}
@Override
public void run() {
fetch_installed_apps();
handler.sendEmptyMessage(0);
}
private Handler handler = new Handler() {
public void handleMessage(Message msg) {
refreshListItems();
pd.dismiss();
}
};
}