選択ダイアログの作り方

複数の項目があってその中から1つだけを選ぶような選択ダイアログを作りたい場合は普通にListViewを使ってもできます。

しかし、AlertDialogならもっと楽な方法があります。

まずstring.xmlなどに表示したいアイテムのリストを作ります。

<string-array name="animal_list">
    <item>Tiger</item>
    <item>Hourse</item>
    <item>Sheep</item>
    <item>Monkey</item>
    <item>Bird</item>
</string-array>

このリストをAlertDialogから参照するだけで選択型ダイアログが作れます。

それが次のコードです。

public class MainActivity extends SherlockFragmentActivity
{
    private final int SINGLE_CHOICE_DIALOG = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        showDialog(SINGLE_CHOICE_DIALOG);
    }
    
    @Override
    public Dialog onCreateDialog(int id)
    {
        switch(id){
        case SINGLE_CHOICE_DIALOG:
            AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
            builder.setTitle("Animal List")
                .setSingleChoiceItems(R.array.animal_list, -1, 
                        new DialogInterface.OnClickListener() 
                {
                    @Override
                    public void onClick(DialogInterface dialog, int which) 
                    {
                        Log.i(LOG_TAG, "アイテムのインデックス番号 = " + which);
                    }
                })
                .setNegativeButton(R.string.cancel, 
                            new DialogInterface.OnClickListener()
                {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {}
                });
            return builder.create.show();
        }
    }
}

setSingleChoiceItemsメソッドにstring-arrayのID名、初期状態で選択されているアイテムのインデックス番号を渡しています。

そしてアイテムがタッチされるとonClickが呼ばれ、どのアイテムが押されたかのインデックス番号を知ることができます。

ただし、アイテムがタッチされても自動的にダイアログは閉じません。

このやり方で次の画像のようなダイアログが表示できます。

選択ダイアログ

ListViewを使ってカスタムリストを作るよりはるかに簡単です。

以上、簡単に選択ダイアログの作る方法でした。では、また!

関連項目
プライバシーポリシー