我的 Android 应用程序使用具有简单两行行的 ListView。该列表使用简单的静态数据填充。我知道在这些情况下填写列表有两种不同的解决方案:
1) 使用带有 Maps ArrayList 的 SimpleAdapter,其中静态数据被放入 HashMaps。
2) 使用带有 MatrixCursor 的 SimpleCursorAdapter,其中静态数据作为行添加到 MatrixCursor。
使用这两种方法有什么优点或缺点吗?例如,它们中的任何一个都会受到性能损失吗?一种或另一种方法更普遍受到青睐,如果是,为什么?
例子
应用程序的主要 Activity 是一个 ListActivity。我在ListActivity的onCreate方法中填写了内置的ListView。
考虑到我在这样的数组中定义了一些静态数据:
private static String fruits[][] =
{
{ "Apple", "red" },
{ "Banana", "yellow" },
{ "Coconut", "white" }
};
使用方法 1) SimpleAdapter 和 Maps 的 ArrayList
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Create an ArrayList of Maps and populate with fruits
ArrayList<Map<String, String>> list = new ArrayList<Map<String, String>>();
for (int i=0; i<fruits.length; i++) {
HashMap<String, String> map = new HashMap<String, String>();
map.put("Fruit", fruits[i][0]);
map.put("Color", fruits[i][1]);
list.add(map);
}
// Create a SimpleAdapter using the ArrayList of Maps,
// which maps the entries Fruit and Color to the Views text1 and text2
String entries[] = { "Fruit", "Color" };
int views[] = { android.R.id.text1, android.R.id.text2 };
SimpleAdapter adapter = new SimpleAdapter(this,
list, android.R.layout.two_line_list_item, entries, views);
// Attach adapter to ListView
setListAdapter(adapter);
}
使用方法 2) SimpleCursorAdapter 和 MatrixCursor
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Create a MatrixCursor and populate with fruits
String columns[] = { "_id", "Fruit", "Color" };
MatrixCursor cursor = new MatrixCursor(columns);
for (int i=0; i<fruits.length; i++) {
cursor.newRow()
.add(i)
.add(fruits[i][0])
.add(fruits[i][1]);
}
// Create a SimpleCursorAdapter using the MatrixCursor,
// which maps the entries Fruit and Color to the Views text1 and text2
String entries[] = { "Fruit", "Color" };
int views[] = { android.R.id.text1, android.R.id.text2 };
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,
android.R.layout.two_line_list_item, cursor, entries, views, 0);
// Attach adapter to ListView
setListAdapter(adapter);
}
哪种方法更好?