2012-07-31 15 views
5

Dialogを拡張するMyCustomDialogというカスタムダイアログを作成しました。次のように私は私のカスタムダイアログを作成して示しています。私は私の初期化を行うためのDialog.onCreate(Bundle savedInstanceState)メソッドをオーバーライドonCreateメソッドでカスタムダイアログをキャンセルまたは却下するにはどうすればよいですか?

new MyCustomDialog(myContext).show(); 

。また、この方法で特定の条件が満たされているかどうかをチェックし、そうでない場合はダイアログを閉じる/キャンセルしたいと思います。私はcancel()dismiss()のメソッドをダイアログのonCreate(Bundle savedInstanceState)onStart()メソッドで呼び出そうとしましたが効果がありません。

ダイアログが表示される前に(ダイアログ内から)ダイアログをキャンセルまたは却下する方法を知っていますか?

+0

onCreate()メソッドでsuper.onCreate()を呼び出していますか? – RaphMclee

+0

これはどのAPIレベルですか? –

答えて

2

ダイアログをonCreate()メソッドの外に表示するかどうかを決定するロジックを配置する必要があります。それはそこに属していません。

代わりに、show()メソッドshowIfRequired()(または何か)の名前を変更して、そこに条件付きショーロジックを追加します。

これは技術的にあなたの質問には答えませんが、あなたがしようとしているのは正しいデザインではありません。それは良いことです、正しい方法で行うことは実際にはもっと簡単です。

また、副注釈としてDialogFragmentを使用してDialogを使用する必要があります。それはv4サポートライブラリで利用可能です。

+0

はい、ダイアログサブクラスでshow()メソッド自体をオーバーライドし、条件付きでsuper.show()を呼び出すことができます。 – CSmith

+1

@CSmithはい、それは 'DialogInterface.show()'メソッドの規約に違反しています。 –

1

これは、以下のAPIレベル10とのためにされています

まずあなたはActivityクラスにonCreateDialog(int型のID、バンドル引数)をオーバーライドする必要があり、何をやっていることはありますか?ダイアログは常にアクティビティの一部として作成され、表示されます。第二に、onCreateDialogが呼び出されたときに実際に作成されていないため、onCreateDialogでダイアログをキャンセル/却棄することはできないと思います。つまり、作成されていないものをキャンセル/却下することはできません。あなたが試みることができるのは、代わりにonPrepareDialog()をオーバーライドし、そのダイアログをキャンセル/却下するためのチェックを行います。その時点で、ダイアログは実際に作成されている(表示されていない)ため、キャンセル/却棄を呼び出すと表示されないようにすることができます。

onPrepareDialog()は、表示されようとしているダイアログのチェックと意思決定を行うための適切な場所です。これはHoneycomb以前のAPI用です。

これは、APIの11以降である:

後でAPIを使用している場合は、代わりにDialogFragmentを拡張する必要があります。この場合、onPrepareDialog()に似たDialogFragmentのonCreateView()メソッドで意思決定を処理できると思います。

私はあなたがこのを読んできました願っています: http://developer.android.com/guide/topics/ui/dialogs.html

またはこれ、あなたのAPIに依存:

http://developer.android.com/reference/android/app/DialogFragment.html

全体的に、おそらくクリーナーソリューションは、そのボタンまたはメカニズムを無効にすることですダイアログが最初に現れますか?つまり、Dialog.show()が実際に呼び出される必要がある場合にのみ呼び出されるようなコードを記述します。私は正確に何をしようとしているのかについてさらに詳しく知る必要があります。たとえば、Dialogを呼び出したとします。ボタンのonClickListenerからshow()を呼び出します。あなたは本当にユーザーがボタンを押してダイアログを期待したくないが、ユーザーが理解できない何らかの理由で表示されないようにしたい。より良い解決策は、ボタンを一括して無効にすることで、アプリケーション内の他の機能のためにこの機能が利用できないことはユーザーには明らかです。

+0

'onCreateDialog()'は 'DialogFragment'のメソッドです。彼は 'DialogFragment'を使わず、' Dialog'を拡張しています。 –

+0

私が話しているonCreateDialogは実際にActivityのメソッドです。私が話しているonPrepareDialog()もそうです。 OPがDialogFragmentを使用しているようには見えません。このアプリが事前ハニカムであれば、これはOPがやっているべきことです(DialogfragmentはHoneycombの前には存在しません)。ハニカム以上の場合は、OPがDialogFragmentを使用する必要があります。私は元の質問にそのコメントを追加しました。 –

関連する問題