2012年5月9日 星期三

Android 開發筆記 - 使用 ListView 和 ListActivity

simple_list_item_1 simple_list_item_2


對 HTML 來說,所謂的 ListView 大概稱得上網頁上常看到的 ul、ol、dt 或是 table 吧!這東西真的是萬用的好工具,最直觀的排版,正所謂規規矩矩,不美也不會太醜。最近我終於開始在 Android 上使用這個東西了,光這功能就能讓你完成九成的工作了。更多 ListViewListActivity 的資訊,請參考官網的介紹,這邊僅簡易的筆記。


在 MyActivity 上呼叫自訂的 MyListActivity 的方式:


public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);


        Intent mIntent = new Intent();
        mIntent.setClass(this, MyListActivity.class);
        startActivity( mIntent );
}


在 MyListActivity 中,使用簡易的排版。範例一,使用系統內建 android.R.layout.simple_list_item_1 排版:


simple_list_item_1


 程式碼:


package com.example.study;


import android.app.ListActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;


public class MyListActivity extends ListActivity {
        @Override
        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);

                String[] values = new String[] { "Android", "iPhone", "WindowsMobile", "Blackberry", "WebOS", "Ubuntu", "Windows7", "Max OS X", "Linux", "OS/2" };
                setListAdapter(
                        new ArrayAdapter<String>(
                                this, 
                                android.R.layout.simple_list_item_1,
                                values) 
                );
        }
}


範例二,使用系統內建 android.R.layout.simple_list_item_2 排版:


simple_list_item_2


程式碼:


package com.example.study;


import android.app.ListActivity;
import android.os.Bundle;
import java.util.ArrayList;
import java.util.HashMap;
import android.widget.SimpleAdapter;


public class ProgramListActivity extends ListActivity {
        @Override
        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);


                final String ID_TITLE = "TITLE", ID_SUBTITLE = "SUBTITLE";

                ArrayList<HashMap<String,String>> myListData = new ArrayList<HashMap<String,String>>();
                String[] titles = new String[]{ "Title1" , "Title2", "Title3" };
                String[] subtitles = new String[]{ "SubTitle1" , "SubTitle2", "SubTitle3" };

                for( int i=0;i<titles.length ; ++i) {
                        HashMap<String,String> item = new HashMap<String,String>();
                        item.put(ID_TITLE,titles[i]);
                        item.put(ID_SUBTITLE,subtitles[i]);
                        myListData.add(item);
                }

                setListAdapter( new SimpleAdapter(
                        this,
                        myListData,
                        android.R.layout.simple_list_item_2,
                        new String[] { ID_TITLE, ID_SUBTITLE },
                        new int[] { android.R.id.text1, android.R.id.text2 } )
                );
        }
}


其中 android.R.layout.simple_list_item_1.xml 和 android.R.layout.simple_list_item_2.xml 的資料,可以查閱自己用的 SDK 囉,例如使用 Android 2.2 時,在 Eclipse 的 Package Explorer 中,可以瀏覽 Android 2.2 -> android.jar -> res.layout 並在裡頭找到。


此處提的範例都是 ListActivity 的,如果你在你的 Activity 的 layout 上擺了一個 ListView 的話,那只需要先用 findViewById 後,就可以仿照 ListActivity 把資料餵進去,如:


ListView mListView = (ListView)findViewById(R.id.listView1);
if( mListView != null ) {
        mListView.setAdapter(
                new SimpleAdapter(
                        this,
                        mDataSource ,
                        android.R.layout.simple_list_item_2,
                        new String[] { ID_TITLE, ID_DETAL },
                        new int[] { android.R.id.text1, android.R.id.text2 }
                )
        );
}


6 則留言:

  1. 看不出來跟ListView差在哪

    回覆刪除
  2. 如想更改LIST ACTIVITY裏的字體大小, 那應在那裏調較?

    回覆刪除
  3. 如想更改LIST ACTIVITY裏的字體大小, 那應在那裏調較?

    回覆刪除
  4. 作者已經移除這則留言。

    回覆刪除
  5. 建議自定layout取代android.R.layout.simple_list_item_2,android.R.id.text1, android.R.id.text2

    回覆刪除
  6. 自定layout就可以修改字體大小顏色背景......

    回覆刪除