Dialogベース(1つのActivityで複数のDialogを作成)

4814 ワード


Android Dev-GuideはActivityの書き換えを推奨します.onCreateDialog()メソッドはDialogを作成し、DialogはこのActivityに帰属します.使い方はこうです义齿onCreateDialog()はDialogを作成し、複数のDialogの統合管理を容易にするために表示されます.注意、後でActivity.showDialog()が同じDialogを表示する場合、Activityは呼び出されません.onCreateDialog()ではなくActivity.を呼び出します.onPrepareDialog()は、前回Dialogを表示したときの状態を使用します.1回目:showDialog()->onCreatedialog()以降:showDialog()->onPrepareDialog()
 
サンプルコードでは、それぞれcreateExitDialog()、createListDialog()、createRadioDialog()、createCheckboxDialog()、4種類のDialogを作成し、Activityに表示します.サンプルコードは次のとおりです.
public class ShowDialogActivity extends Activity {
    /** Called when the activity is first created. */
public static final String TAG = "ShowDialog";
public static final int ID_EXIT_DIALOG = 1;
public static final int ID_LIST_DIALOG = 2;
public static final int ID_RADIO_DIALOG = 3;
public static final int ID_CHECKBOX_DIALOG = 4;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        showDialog(ID_EXIT_DIALOG);
        showDialog(ID_LIST_DIALOG);
        showDialog(ID_RADIO_DIALOG);
        showDialog(ID_CHECKBOX_DIALOG);
    }  
    @Override
    protected Dialog onCreateDialog(int id) {
    // TODO Auto-generated method stub
    Dialog dialog = null;
    switch(id) {
    case ID_EXIT_DIALOG :
    dialog = createExitDialog();
    break;
    case ID_LIST_DIALOG :
    dialog = createListDialog();
    break;
    case ID_RADIO_DIALOG :
    dialog = createRadioDialog();
    break;
    case ID_CHECKBOX_DIALOG :
    dialog = createCheckboxDialog();
    break;
    default :
    break; }
    if (dialog != null) {
    Log.i(TAG, dialog.toString());
    } else {
    Log.i(TAG, "dialog = null");   }
    return dialog;    }    
    @Override
    protected void onPrepareDialog(int id, Dialog dialog) {
    // TODO Auto-generated method stub
    super.onPrepareDialog(id, dialog);
    }
    // Dialog
    public Dialog createExitDialog() {
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setMessage("Are you sure you want to exit?")
          .setCancelable(false)
          .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
              public void onClick(DialogInterface dialog, int id) {
                   ShowDialogActivity.this.finish();
              }
          })
          .setNegativeButton("No", new DialogInterface.OnClickListener() {
              public void onClick(DialogInterface dialog, int id) {
                   dialog.cancel();
              }
          });
    return builder.create();
    }
    // ListDialog
    public Dialog createListDialog() {
    final CharSequence[] items = {"Red", "Green", "Blue"};
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setTitle("Pick a color");
    builder.setItems(items, new DialogInterface.OnClickListener() {
       public void onClick(DialogInterface dialog, int item) {
           Toast.makeText(getApplicationContext(), items[item], Toast.LENGTH_SHORT).show();
       }
    });
    return builder.create();
    }
    // Dialog
    public Dialog createRadioDialog() {
    final CharSequence[] items = {"Red", "Green", "Blue"};
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setTitle("Pick a color");
    builder.setSingleChoiceItems(items, -1, new DialogInterface.OnClickListener() {
       public void onClick(DialogInterface dialog, int position) {
           Toast.makeText(getApplicationContext(), position + " -> " + items[position], Toast.LENGTH_SHORT).show();
           dialog.dismiss();
       }
    });
    return builder.create();
    }
    // Dialog
    public Dialog createCheckboxDialog() {
    final CharSequence[] items = {"Red", "Green", "Blue"};
    final boolean [] checked = new boolean [] {false, false, false};
   
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setTitle("Pick a color");
    builder.setMultiChoiceItems(items, checked, new DialogInterface.OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
// TODO Auto-generated method stub
}
});
    builder.setPositiveButton(" ", new DialogInterface.OnClickListener() {
          public void onClick(DialogInterface dialog, int id) {
               ShowDialogActivity.this.finish();
          }
      })
      .setNegativeButton(" ", new DialogInterface.OnClickListener() {
          public void onClick(DialogInterface dialog, int id) {
               dialog.cancel();
          }
      });
    return builder.create();
    }
}