諸君早安(゚∀゚)
又到了新年app小組寫教學文的時間囉
今天呢,我們要練習的是"ListView"跟"AlertDialog"
這個要怎麼寫?絕對難不倒你

正文開始

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    tools:context="com.example.gavin.listview.MainActivity">

    <LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_alignParentTop="true"
        android:layout_alignParentEnd="true">

        <ListView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/listView" />
    </LinearLayout>
</RelativeLayout>

這是我們今天要用到的app它的xml部分
由於只是放ListView而已,所以就算不複製這段上去也不會花太多時間
那我們就廢話不多說,趕緊進主題。

    ListView listView;
    ArrayAdapter arrayAdapter;
    //Adapter有適配器、連接器之稱
    String[] str = {"HI!我是第一格","HI!我是第二格","HI!我是第三格","嗨。我是鮑伯。"};

這裡是宣告的部分,
String[] str裡面的內容可以隨便放,基本上不要違反輸入的規則就不會在這邊出錯

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        listView = (ListView)findViewById(R.id.listView);

        arrayAdapter = new ArrayAdapter(this,android.R.layout.simple_list_item_1,str);
        listView.setAdapter(arrayAdapter);
        listView.setOnItemClickListener(onClickListView);

    }

我們今天用的xml就只有activity_main一個而已,所以理所當然的setContentView部分就是填入(R.layout.activity_main)。

ArrayAdapter那段後面有三個參數,第二個參數"R.layout.simple_item_1"是在描述說它在ListView的表現狀態(這樣講好像有點奇怪?)
後面的阿拉伯數字如果是"1",那它一個item就只會有一行文字

如果後面的阿拉伯數字是"2",那它一個item可以有兩行文字(上方的文字會比較小)

大家如果有需要可以google看看item_2的用法。

至於ArrayAdapter的第三個參數str,當然就是要放進去item裡面的string囉

寫完之後請務必要寫上"listView.setAdapter(arrayAdapter)",否則ListView還是會是空白的。


    public AdapterView.OnItemClickListener onClickListView = new AdapterView.OnItemClickListener(){

        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

            AlertDialog.Builder AD = new AlertDialog.Builder(MainActivity.this);
            AD.setTitle("這格的內容是");
            AD.setMessage(str[position]);

            AD.setPositiveButton("好喔", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {

                }
            });

            AD.show();

        }
    };

想必剛才大家一定還有注意到,onCreate(…)裡面還有一段"listView.setOnItemClickListener(onClickListView);"

沒錯,這裡的code就是寫給listView裡面每個item的監聽器(onCLickListener)。

這裡呢我們讓它item被按下去以後會彈出"AlertDialog"的視窗。

AlertDialog你可以把它想成遊戲裡面的那種詢問視窗,

就像是你快沒血的時候,按了道具攔的「回復藥」,它還會跳出一個「你是否要使用?」的惱人視窗。

AlertDialog差不多就是那種存在,不過應該是不至於會惱人就是了…吧?

另外,要提醒大家一個很重要的事情:

一定要寫(AlertDialog.Builder的名字).show();
一定要寫(AlertDialog.Builder的名字).show();
一定要寫(AlertDialog.Builder的名字).show();

很重要,真的很重要所以又Ctrl+V兩次。
有一次我在debug的時候就是忘記這點,搞了半天才發現…囧rz

沒有這行.show()的話,你的item無論按了幾百次都是沒用的!
少了它,AlertDialog永遠都不會出現啊!


後記

嗯…老實說這篇是我第一個寫的教學文,有點抓不太到節奏Orz
寫起來就很亂,還請各位見諒。

內容有不少都是參考網路上各處的資料所學來的,
以及外加我個人的奇妙見解(?),如果其中有所錯誤,還請各方學者不吝指教。

以上,在這裡再次向各位拜個早年。