6

MyCustomDialogを拡張するというカスタムダイアログを作成しましたDialog。次のようにカスタムダイアログを作成して表示します。

new MyCustomDialog(myContext).show();

Dialog.onCreate(Bundle savedInstanceState)メソッドをオーバーライドして初期化を行います。また、このメソッドで特定の条件が満たされているかどうかを確認し、当てはまらない場合は、ダイアログを閉じたりキャンセルしたりします。ダイアログのandメソッドでcancel()andメソッドを呼び出そうとしましたが、効果がありません。dismiss()onCreate(Bundle savedInstanceState)onStart()

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

4

2 に答える 2

4

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

show()または、メソッドshowIfRequired()(または何か)の名前を変更し、そこに条件付き表示ロジックを追加します。

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

また、補足として、を優先してDialogFragmentを使用する必要がありますDialog。v4サポートライブラリで利用できます。

于 2012-07-31T16:19:13.983 に答える
1

これは、APIレベル10以下の場合です。

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

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

これはAPI11以降用です。

それ以降の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()が本当に呼び出される必要がある場合にのみ呼び出されるようにコードを記述します。私はあなたが何をしようとしているのかについてもっと詳しく知る必要があるでしょう。たとえば、ボタンのonClickListenerからDialog.show()を呼び出したとします。ユーザーにボタンを押してダイアログを期待させたくはありませんが、ユーザーが理解できない何らかの理由でダイアログが表示されないようにします。より良い解決策は、ボタンをすべて一緒に無効にして、アプリケーション内の他の何かのためにこの機能が使用できないことをユーザーに明らかにすることです。

于 2012-07-31T16:26:04.500 に答える