LoginSignup
2
2

More than 5 years have passed since last update.

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

Posted at

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の順番によらずボタンを押した際の動作が保証されます。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2