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