Help us understand the problem. What is going on with this article?

ListDialogで条件分岐でボタンを切り替える場合

More than 5 years have passed since last update.

ListDialogで複数のボタンをつける場合は、ListDialogを使いますが1つ目のボタンは条件によってはつける…つけない、2つ目は…とやっていくとOnItemClickでwhichの値を足したり引いたりして忙しくなります。
そこで、条件によってボタンが激しく入れ替わる場合はArrayAdapterにボタンクラスを入れてAlertDialogで出してあげます。

ArrayList<CommandObject> arrayList = new ArrayList<CommandObject>();
        arrayList.add(new CommandObject("動作A",Command.A));
        arrayList.add(new CommandObject("動作B",Command.B));
        arrayList.add(new CommandObject("動作C",Command.C));
        final AlertAdapter adapter = new AlertAdapter(getActivity(), android.R.layout.simple_list_item_1,(CommandObject[])arrayList.toArray(new CommandObject[0]));
        AlertDialog.Builder alert = new AlertDialog.Builder(getActivity());
        alert.setAdapter(adapter,new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                CommandObject object = adapter.getItem(which);
                action(object.getCommand());
            }
        });
        alert.show();

CommandObjectにはenumで定義したコマンドの管理変数、ボタン名を入れます。
それをArrayAdapterで管理させ、クリック時にクリックされた部分のCommandObjectからコマンドの管理変数を取得、実行させます。

private void action(NFZCommand command){
        switch (command){
            case A:
                Log.d("debug","A");
                break;
            case B:
                Log.d("debug","B");
                break;
            case C:
                Log.d("debug","C");
                break;
            default:
                break;
        }
    }

こうすれば、ArrayListの順番によらずボタンを押した際の動作が保証されます。

noppefoxwolf
きつねすき、にんげんこわい
https://noppelab.com
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away