如何使用ListDialog

如何使用ListDialog

情境

假設你有一個Button按下去想要跳出一個條列式的Dialog怎麼寫?
其實這是AlertDialog的一種呈現方式
透過AlertDialog可以輕易操作這樣的介面

程式碼說明

先建立好button在xml上面

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.givemepass.listdialogdemo.MainActivity">

    <Button
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="ListDialogDemo"
        android:id="@+id/listdialog_button" />
</RelativeLayout>

接著來到java檔案,將這個xml套進去

public class DemoListDialogActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
}

首先我們先將所有要呈現的item寫在字串陣列裡面

CharSequence[] items = {"item1","item2","item3"};

假設寫好了三個項目, 接著我們建立一個AlertDialog,
然後寫好事件把這三個項目丟進去AlertDialog,
然後在根據按下那個item就以Toast顯示出來
現在再寫入Button按下去的事件,

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    findViewById(R.id.listdialog_button).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            showDialog();
        }
    });
}

則會跳出我們做好的這個List Dialog,

private void showDialog(){
    new AlertDialog.Builder(MainActivity.this)
        .setItems(items, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int which) {
                switch (which) {
                    case 0:
                        Toast.makeText(MainActivity.this, "item1", Toast.LENGTH_SHORT).show();
                        break;
                    case 1:
                        Toast.makeText(MainActivity.this, "item2", Toast.LENGTH_SHORT).show();
                        break;
                    case 2:
                        Toast.makeText(MainActivity.this, "item3", Toast.LENGTH_SHORT).show();
                        break;
                }
            }
        }).show();
}

由於showDialog裡面的參數我們沒有用到,所以隨便傳入什麼數字都可以,
這樣我們所有的功能都到齊了,
完整程式碼

public class MainActivity extends AppCompatActivity {
    private final CharSequence[] items = {"item1","item2","item3"};
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        findViewById(R.id.listdialog_button).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                showDialog();
            }
        });
    }
    private void showDialog(){
        new AlertDialog.Builder(MainActivity.this)
            .setItems(items, new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int which) {
                    switch (which) {
                        case 0:
                            Toast.makeText(MainActivity.this, "item1", Toast.LENGTH_SHORT).show();
                            break;
                        case 1:
                            Toast.makeText(MainActivity.this, "item2", Toast.LENGTH_SHORT).show();
                            break;
                        case 2:
                            Toast.makeText(MainActivity.this, "item3", Toast.LENGTH_SHORT).show();
                            break;
                    }
                }
            }).show();
    }
}

你就可以看到下面的圖



github