75

私はLoginActivity(ユーザーログイン)を持っています。ダイアログのようにテーマ化されているのは基本的に独自のActivityものです(ダイアログのように表示されます)。の上に表示されますSherlockFragmentActivity。私が望むのは、ログインに成功した場合FragmentTransaction、ビューを更新するために2つの 's があるはずです。コードは次のとおりです。

LoginActivity、ログインに成功すると、

setResult(1, new Intent());

SherlockFragmentActivity

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (resultCode == 1) {
        LoggedStatus = PrefActivity.getUserLoggedInStatus(this);
        FragmentTransaction t = MainFragmentActivity.this.getSupportFragmentManager().beginTransaction();
        SherlockListFragment mFrag = new MasterFragment();
        t.replace(R.id.menu_frame, mFrag);
        t.commit();

        // Set up Main Screen
        FragmentTransaction t2 = MainFragmentActivity.this.getSupportFragmentManager().beginTransaction();
        SherlockListFragment mainFrag = new FeaturedFragment();
        t2.replace(R.id.main_frag, mainFrag);
        t2.commit();
    }
}

この LogCat では、最初のコミットでクラッシュします。

E/AndroidRuntime(32072): Caused by: java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
E/AndroidRuntime(32072):    at android.support.v4.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1299)
E/AndroidRuntime(32072):    at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1310)
E/AndroidRuntime(32072):    at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:541)
E/AndroidRuntime(32072):    at android.support.v4.app.BackStackRecord.commit(BackStackRecord.java:525)
E/AndroidRuntime(32072):    at com.kickinglettuce.rate_this.MainFragmentActivity.onActivityResult(MainFragmentActivity.java:243)
E/AndroidRuntime(32072):    at android.app.Activity.dispatchActivityResult(Activity.java:5293)
E/AndroidRuntime(32072):    at android.app.ActivityThread.deliverResults(ActivityThread.java:3315)
4

5 に答える 5

-1

あなたのlogcatは明確に言っています:「onSaveInstanceStateの後にこのアクションを実行できません」 -あなたActivityはその時点ですでに死んでおり、結果を返すことができませんでした。

移動するだけです:

Intent in = new Intent();
setResult(1, in);

Activityそれがまだ生きているあなたの場所に、そしてすべてがうまくいくでしょう。結果を出すことを忘れないでfinish()ください。Activity

于 2013-04-28T17:46:50.223 に答える