2012-03-09 5 views
2

ダイアログを継承し、ユーザーが連絡先を選択できるようにするカスタムダイアログクラスを作成しようとしています。私が使用してちょうど罰金を表示することを選択した連絡先を取得することができます。カスタムダイアログクラスでonActivityResultを処理する方法

this.getOwnerActivity().startActivityForResult(...); 

を問題は、これは、ユーザーが連絡先を選択し、ダイアログの親アクティビティにonActivityResult()を呼び出すことです。親アクティビティではなく、ダイアログクラスにアクティビティ結果の処理をカプセル化したいと思います。これが可能である

inside Android Dialog, how to setup onActivityResult for startActivityForResult?

This chap asked the same question は、しかし、実行可能な答えを受信しませんでしたか?かなり基本的なことをしたいと思うので、私は方法があると思います。

ダイアログを全く新しいアクティビティに変換することはできますが、ダイアログはアプリのコンテキスト内で非常にうまく動作するので、私はそれに頼る必要はありません。

答えて

5

このダイアログは、そのアクティビティの2次的なものです。 startActivityForResult()でアクティビティを開始すると、ダイアログが閉じられ(アクティビティがリサイクルされる可能性があります)。したがって、YourActivity.onActivityResult()に戻ると、ダイアログはアクティブではなく、実際には元のダイアログオブジェクトがもう存在しません。ダイアログを再度インスタンス化して表示し、必要なデータを渡して何かをさせることができますが、これは非常に悪い設計のようです。代わりに、結果をアクティビティで処理し、ダイアログを開いてユーザーと通信します。

+0

親のアクティビティがダイアログを作成し、アクティビティの結果を処理する場合、このプロセス全体がうまく動作します。ユーザーの対話はまったく同じです:ダイアログが立ち上がり、ユーザーが「連絡先を選択」を選択し、連絡先選択画面が表示され、ユーザー – Mekon

+0

あなたのコメントには一部のテキストがありません... – Macondo2Seattle

+1

申し訳ありませんが、私のコメントの。親アクティビティがダイアログの作成を処理し、startActivityForResult()を介して連絡先チューザを開始し、アクティビティの結果を処理する場合、このプロセス全体がうまく動作します。ダイアログは表示され、ユーザーは「連絡先を選択」を選択し、連絡先選択が表示され、ユーザーが連絡先を選択し、ダイアログが新しい連絡先で更新されます。私は、親アクティビティですべてを処理するのではなく、カスタムダイアログクラスでこれをカプセル化したいだけです。 – Mekon

1

ダイアログの代わりにDialogFragmentを使用できます。 @BlackRider already answeredこのダイアログは、その活動の副次的なものです。 startActivityForResult()を使用してアクティビティを開始すると、ダイアログが閉じられます。

関連する問題