2011-09-19 9 views
32

私は、複数のフラグメントを持つアクティビティを持つ問題に遭遇しています。個々のフラグメントについては、検索操作を実行することができます。フラグメントのいずれかから検索すると、検索を処理する新しいアクティビティが表示され、その結果をアクティビティに返して、新しい断片。問題は、検索操作の後、私は離れてpopBackStackImmediate(...)saveInstanceState(...)以降を使用して、すべての断片が呼び出された(ほぼ)クリアできるようにしたいが、私が言うの例外を取得:popBackStack()after saveInstanceState()

"java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState" 

任意のアイデアどのようにポップをバックスタックからonSaveInstanceStateの後に呼ばれていますか?

答えて

1

関連するアクティビティを開始する直前にスタックをポップするのはどうですか? startActivityが呼び出されるまで、onSaveInstanceStateは呼び出されませんでした(新しいアクティビティが現在のものの前に来ました...その直前に、フラグメントスタックを目的の状態にポップしてからstartActivityを呼び出します)。

フラグメントスタックは通常のタスク/バックスタックの上にあるレイヤーですが、私はそれを "中央から"変更することで問題が発生すると思いますので、この問題が発生していると思います。

19

onActivityResult (...)

私は、問題を、Runnable内にUI変更コードを入れてから、メインスレッドに投稿して修正することができました:

Runnable r = new Runnable() { 
    @Override 
    public void run() { 
     // UI code here 
    } 
}; 
Handler h = new Handler(); 
h.post(r); 
+0

あなたはちょうど私の心を救った。私はほとんど何が間違っているのか理解しようと狂った。 +1 – Dimanoid

+0

私が抱えていた問題を修正しました! SingleTopアクティビティ、onNewIntentのフラグメントバックスタックをポップします。 AndroidAnnotationsで@UiThreadを自分のメソッドに追加してクラッシュを修正しました。 –

+6

あなたのロジックの前にsuper.onActivityResultを呼び出すと、FragmentActivityのonActivityresultがmFragments.noteStateNotSaved();を呼び出して問題が解決されます。 – Shilpi

14

最初にあなたのロジックの前にコールsuper.onActivityResult、問題はこの答えは誰かに役立つことであるFragmentActivityのonActivityResult呼び出しmFragments.noteStateNotSaved();

+0

ありがとう、私の日hahaを救った –

4

として固定されます。あなたのアクティビティが表示されていないときは、popBackStackImmediate(...)を呼び出すことができません。これは、違法をスローします。Exception:onsaveinstancestateの後でこのアクションを実行できません。

代わりに、アクティビティが表示されているかどうかをチェックすることができます。 popBackStackImmediate()を呼び出す前に。

アクティビティが表示されない場合は、popBackStackImmediateを呼び出しないでください。 アクティビティが再び開いたときに達成できるブール値フラグ

+0

最後の部分を理解していない。だから私の活動が見えなくても、私はその活動をしないのですが、活動が見えたら、どうすればいいのでしょうか? –

+0

アクティビティが表示されていないときにpopBackStackImmediate(...)を呼び出す場合。ブール値をtrueに設定します。 あなたのアクティビティがフォアグラウンドになると、onResume()アクティビティでブール値をチェックすることができます。そうであればpopBackStackImmediate(...)を呼び出すことができます – Thirumalvalavan

+0

どのくらい正確にですか?コード例であなたの答えを編集できますか? –