ダイアログ(Dialog)の閉じ方

ある動作が行われた時点でダイアログを消したい場合は、次の3つのメソッドの内から用途に合わせて1つを呼び出します。

canceldismissはダイアログを終了するメソッド、hideはダイアログを隠すメソッドです。

dismissメソッド

まずdismissメソッド使っているのが次のコードです。

    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    LayoutInflater inflater = LayoutInflater.from(this);
    final View dialogView = inflater.inflate(R.layout.dialog, null);
    
    builder.setView(dialogView)
        .setTitle(R.string.dialog_title)
        
    AlertDialog dialog = builder.create();
    dialog.show();
    
    try {
        Thread.sleep(2000);
    } catch (InterruptedException e) {}
    
    dialog.dismiss();

この例ではダイアログ表示後に2秒間だけ停止し、その後をダイアログを破棄しています。

この例でも分かるように必ずダイアログのshowメソッドを呼び出した後にdismissメソッドを呼び出します。

cancelメソッド

次にcancelメソッドです。

先ほどの例でdismisscancelメソッドに変えても同じように2秒後にダイアログが破棄されます。では、dismissと何が異なるかというと終了する際にonCancelListenerが呼び出されるかどうかの違いしかありません。

つまり、cancelメソッドはダイアログがキャンセルされたときに何か処理をしたい場合に呼ぶメソッドということになります。

hideメソッド

hideメソッドはただ単に画面上からダイアログを隠すために使われます。なのでいったんhideメソッドを呼び出しても次のようにshowメソッドで再び表示することが可能です。

public class MainActivity extends Activity 
{
    
    AlertDialog saveDialog = null;
    
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        createDialog();

        //隠されたダイアログを再表示するボタン
        Button showButton = (Button)findViewById(R.id.showButton);
        showButton.setOnClickListener(new View.onClickListener()
        {
            if(saveDialog != null){
                saveDialog.show();
            }
        });
   }
    
    public void createDialog()
    {
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        LayoutInflater inflater = LayoutInflater.from(this);
        final View dialogView = inflater.inflate(R.layout.dialog, null);
        Button button = (Button)dialog_view.findViewById(R.id.dialog_button);
        
        builder.setView(dialogView)
            .setTitle(R.string.dialog_title)
            
        final AlertDialog dialog = builder.create();
        dialog.show();
        
        button.setOnClickListener(new View.onClickListener()
        {
            dialog.hide();
                //ダイアログを隠す
        });
    }

この場合はダイアログが隠されたらダイアログを保存し、それを再表示できるようにしています。

また、hideメソッドを呼び出す場所は必ずshowメソッドの前でなくてはなりません。

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