2

LoaderCallbacks インターフェイスを実装する Fragment の onLoadFinished メソッド内から DialogFragment を表示しようとすると、例外が発生します。基本的には、LoaderCallbacks を使用して残りのサービスからデータを取得し、onLoadFinished で ListVeiw を含むカスタム DialogFragment を表示して、ユーザーが選択できるようにしようとしています。onLoadFinished 内からダイアログを起動しようとする場合を除いて、すべてがうまく機能します。どうすればこれを達成できますか..これは問題に対する正しいアプローチですか.

これが私がやろうとしていることの例です:

public class EventFragment extends Fragment implements LoaderCallbacks<someresponse> {

    @Override
    public void onLoadFinished(Loader<someresponse> arg0, someresponse data) {
        //an exception is generated when trying to launch a dialog fragment from 
        //within the onLoadFinished
        FragmentManager manager = getFragmentManager();             
        ListViewDialogFragment dialog = ListViewDialogFragment.newInstance(data);   
        dialog.show(manager, "event_list_dialog");  

    }
}

ありがとう!

4

2 に答える 2

5

したがって、いくつかの調査の結果、私のアプローチは正しくないと判断しました。LoaderCallbacks非同期タスクのonLoadFinishedメソッド内から新しいフラグメントを起動しようとしないでください。LoaderCallbacksを実装する現在実行中のフラグメントまたはアクティビティの状態は不確定であり、非同期タスクの終了時に存在することが保証されていないため、フレームワークはこれを行わないようにします。

さらに、処理ダイアログの状態とデータ表示の状態を2つの別々のフラグメントに分離しようとすることは、AndroidフレームワークがサポートするMVCデザインパターンに少し反します。とは言うものの、私の新しいアプローチは、LoaderCallbacksが特定の線形レイアウトを非表示または表示するようにフラグメントのビューを動的に変更することで構成されていました。1つはプロセスインジケーター用で、もう1つはデータの表示用です。このアプローチでは、うまくいった新しいフラグメントを起動する代わりに、既存のフラグメントを変更する必要がありました。

これが最終的に私に明確さを与えた議論へのリンクです。

https://groups.google.com/forum/#!topic/android-developers/dXZZjhRjkMk/discussion

于 2012-09-04T17:49:39.997 に答える
1

定義するアプローチは、1つのケースを除いて、非常に優れています。ロード操作が終了したときに、アクティビティがすでに画面から消えていた場合はどうなりますか?この場合、ダイアログはどのように表示されますか?

したがって、一般的に、どの例外が発生したかを正確に教えていただければ幸いです。ただし、一般的なアプローチとして、フラグメントを保持しているアクティビティがまだ最上位にあるかどうか、または終了したかどうかを確認すると便利です。さらに良いことに、アクティビティ/フラグメントが破棄されているときにすべてのバックグラウンド操作をキャンセルすることを検討する必要があります。この場合、ダイアログの表示に問題はありません。

幸運を!

于 2012-09-02T17:20:20.673 に答える