android中ListView的簡單使用

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="https://schemas.android.com/apk/res/android"

    xmlns:tools="https://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="https://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);

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。