1. 程式人生 > >Android學習筆記(十一:Activity-ListView

Android學習筆記(十一:Activity-ListView

在手機中經常有列表方式。如果Activity中只有唯一一個List(這也是通常的情況),可以繼承ListActivity來實現。我們用兩個例子來學習List。

List例子一:利用Android自帶的List格式

步驟一:Android XML檔案

ListActivity是一個全屏的list,如果我們需要定製layout,例如加上一個button之類的什麼的,我們需將ListView的id設定為“@android:id/list”,我們可以同getListView來獲取ListView的物件,下面是XML的例子:

.... <LinearLayout ...> <!-- 在這裡我曾忘了設定android:orientation="vertical" ,結果無法顯示第二個widget,查了我很久-->

...<Button … /> <--在這個例子中,我們在加入了一個Button,因此採用定製Layout的方式,即設定@android:id/list  -->    <ListView android:id="@android:id/list"      android:layout_width="fill_parent"     android:layout_height="fill_parent"     android:drawSelectorOnTop="false" /> </LinearLayout>

步驟二:原始碼

1)使用String陣列設定List的item內容

例如:String[] items={"One", "Two", "Three", "Four", "Five"};

2)在onCreate中將item的內容加入,使用setListAdapter並設定List的格式

setListAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,items));

ArrayAdapter有三個引數,第一是物件,第二是List的格式,第三個是List的內容。對於格式這個例子採用了Android自定義的幾種格式,後面會具體列出。android.R.layout.simple_list_item_1是TextView的方式,採用big font,是最為常見的方式。

3)點選List的Callback方法

由於集成了ListActivity,可以直接使用回撥函式onListItemClick

4)例子

public class BeginingBook extends ListActivity {     String[] items={"One","Two","Three","Four","Five","Six","Serven"};     private Button button;     /** Called when the activity is first created. */    @Override     public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);         setContentView(R.layout.main);

        setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,items));        button =(Button)findViewById(R.id.chapter7);    }     public void onListItemClick(ListView parent,View v, int position, long id){        button.setText(items[position]); //position是點選的item的序號,從0開始。    } }

5)不同的呈現模式

我們修改ArrayAdapter的第二個顯示的模式。另外可以通過getListView()獲取ListView的物件,設定ListView的一些屬性,ListView的一些常用方法:setChoiceMode(),getCheckedItemPositions() 。

setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_single_choice,items));getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);//表明有選項,如果不設定,預設為none,即我們點選後仍無反應

setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_multiple_choice ,items));getListView().setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); //注意,只要點選就會觸發Callback,而不過是的點選後選上還是變為取消。

setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_checked,items));getListView().setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);

下面,第一個圖為android.R.layout.simple_list_item_1,接著依次為上面三種格式。

csdn

List例子二:自定義的List格式(來自Tutorial)

步驟一:建立一個描述list item格式的XML檔案

<?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android"            android:id="@+id/rowtv1"             android:layout_width="fill_parent"             android:layout_height="wrap_content"             android:padding="10dip"             android:textSize="16dip">  </TextView>

步驟二:通過XML定義item

在第一個例子中,我們使用String[]來定製item。但是之前,我們也學習到,為了適合多種語言,最要這些資訊都在XML檔案中定義,只需更換XML檔案,就可以適配不同的語言。我們在string.xml檔案中增加相關的定義:

<?xml version="1.0" encoding="utf-8"?> <resources>     … …     <string-array name="countries_arry">         <item>Bharain</item>         <item>Bangladesh</item>         <item>Barbados</item>         <item>Belarus</item>         <item>Belgium</item>         <item>Belize</item>         <item>Benin</item>    </string-array> </resources>

步驟三:原始碼

public class Chapter7Test2 extends ListActivity{

    public void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);        String[] contries=getResources().getStringArray(R.array.countries_arry);        setListAdapter(new ArrayAdapter<String>(this, R.layout.chapter_7_test2_list, contries));        ListView lv=getListView();         lv.setTextFilterEnabled(true);         lv.setOnItemClickListener(new OnItemClickListener(){             public void onItemClick(AdapterView<?> parent, View view, int position, long id){                //Toast.makeText(Chapter7Test2.this, ((TextView) view).getText(), Toast.LENGTH_SHORT).show();                Toast.makeText(getApplicationContext(), ((TextView) view).getText(), Toast.LENGTH_SHORT).show();            }         });

    } }

Toast

  上面給出Toast的例子。Toast.makeText(物件,文字內容,格式).show()。

謠言的兩個要求

  需要釋出的源頭和傳遞的途徑。將兩個小故事:

  昨天下午,有位同事(今年也30了,研究生畢業,從年齡和學歷都是比較成熟了)說收到訊息:日本地震是核試驗失敗導致,她覺得可以信,因為美軍在千里之外也受到輻射。聽了就知道是謠言,因此日本輻射的時間是核電站發生氫氣爆炸的時間一致的,至於美軍,地震海嘯後,美國就是派兩航母過去。開始不明白航母有什麼用,後來說航母的直升飛機協助救人。一派老大哥罩這小弟的樣子,後來核輻射,兩個航母就不知道躲哪裡,威威地出來,迅速地閃了。有兩個國家沒有原子彈,但是有製造原子彈的能力,一個是南非,白人政府在下臺之前銷燬的核彈,一個是日本,日本核能很發達,能夠在短期內生產原子彈。日本目前沒有任何理由去製造,這太小看日本的科技技術,也太無視人家的政治智慧,這種做法百害無一利。

  今天最大的謠言就是搶購鹽。可能怕海水汙染,在蘇丹紅,三鹿XX,瘦肉精面前如此淡定的我們,有什麼可怕呢。實際上中國大部分的鹽都是井礦鹽,沿海是鹽場賺錢還是養殖場賺錢,已經沒幾個海鹽場,所以這些就是藉機炒作的無良商販或者投機倒把的遊資行為,這種興風作浪趁火打劫的行為應給予譴責。

  製造流言的人以最惡毒地心態去製造謠言,並迎合了很多缺乏自我思考能力的狹窄和偏激的歷史觀和民族觀的人。以卑鄙無恥為源頭,以愚昧無知為途徑,當這兩結合起來的時候,非常令人失望,悲觀,甚至恐懼。