ListView控件在android中控件類中,算是比較復雜的一種,其實現一般包含以下幾個部分
1)數據的准備
2)構建適配器
3)顯示數據
在使用ListVIew這個控件時,我發現好多人都出現了這樣的問題"your content must have a listview whose id attribute is"android.R.id.List”錯誤,
然後好多網友給出的答案就是,在.xml中 android:id="@+id/list" 改為 android:id="@+id/android:list“
其實並不一定是這樣的錯誤。首先要區別采用的是何種使用ListView方法。ListView的控件有兩種使用方法,
一、使用android內部的ListView【以一個例子來說明】
1.主.xml文件 【注意紅色部分】
<LinearLayout 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"
tools:context=".MainActivity"
android:orientation="vertical">
<ListView
android:id="@+id/android:list"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:drawSelectorOnTop="false"
android:scrollbars="vertical"
></ListView>
</LinearLayout>
2.ListView顯示的內容.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/linelayout"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:orientation="horizontal">
<TextView
android:id="@+id/key"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:textColor="#aa0000"
/>
<TextView
android:id="@+id/value"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
/>
</LinearLayout>
3.java文件
繼承了ListActivity類,而不是Activity類
public class MainActivity extends ListActivity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//注意此處 沒有用findViewById來取得ListView控件的id
//創建hashmap型數據
ArrayList<HashMap<String,String>> mylist=new ArrayList<HashMap<String,String>>();
HashMap<String,String> map1=new HashMap<String,String>();
HashMap<String,String> map2=new HashMap<String,String>();
map1.put("key", "張三");
map1.put("value", "學生");
map2.put("key", "李四");
map2.put("value", "老師");
mylist.add(map1);
mylist.add(map2);
//構建適配器
SimpleAdapter listAdapter=new SimpleAdapter(this,mylist,R.layout.hashmap,
new String[]{"key","value"},new int[]{R.id.key,R.id.value});
//適配器中的數據時如何傳遞到ListView的,
setListAdapter(listAdapter);
}
二、自定義ListView
1.主xml文件
與上面只有一處區別
android:id="@+id/list"
2.listview的布局文件: 同上
3.java文件
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listview=(ListView)findViewById(R.id.list);
ArrayList<HashMap<String,String>> mylist=new ArrayList<HashMap<String,String>>();
HashMap<String,String> map1=new HashMap<String,String>();
HashMap<String,String> map2=new HashMap<String,String>();
map1.put("key", "張三");
map1.put("value", "學生");
map2.put("key", "李四");
map2.put("value", "老師");
mylist.add(map1);
mylist.add(map2);
SimpleAdapter listAdapter=new SimpleAdapter(this,mylist,R.layout.hashmap,
new String[]{"key","value"},new int[]{R.id.key,R.id.value});
//listview這個對象添加setAdapter對象
listview.setAdapter(listAdapter);