0

私のアプリケーションは通常、同じフラグメントを何度も追加してから削除します。以下は私がこれを行う方法です:

Add fragment

if (mHomeFragment == null)
    {
        mHomeFragment = new HomeFragment();
        new Handler().postDelayed(new Runnable()
        {
            @Override
            public void run()
            {
                getSupportFragmentManager().beginTransaction().add(R.id.dummy, mHomeFragment).commit();
            }
        }, getResources().getInteger(R.integer.transition_duration));
    }
else
    {
        getSupportFragmentManager().beginTransaction().add(R.id.dummy, mHomeFragment).commit();
    }

Remove fragment

getSupportFragmentManager().beginTransaction().remove(mHomeFragment).commit();

問題は、そのフラグメント (HomeFragment) を含むアクティビティから別のアクティビティに移動すると、アプリがクラッシュすることがあるということです。私は理由を理解しようとしましたが、それでも方法はありません。このエラーは頻繁には発生しないため、ここには完全なエラー ログはありませんが、エラーは次のように同じですhttps://android.googlesource.com/platform/frameworks/support/+/5506618c80a292ac275d8b0c1046b446c7f58836%5E!/ :

IllegalStateException: Failure saving state......active HomeFragment{419494f0} has cleared index: -1 

誰かが私のコードに問題があるか、このエラーを修正する方法を知っていますか?助けてください。よろしくお願いします。

4

1 に答える 1

1

アクティビティが一時停止または終了した後、ランナブルが実行されているようです。アクティビティの onPause メソッドで handler.removeCallback を必ず呼び出して、完了後のアクティビティへのコールバックを回避してください。

フラグメントを頻繁に交換する必要がある場合は、FragmentTransaction のhideメソッドとshowメソッドを使用して、初期化のオーバーヘッドを回避できます。

于 2012-11-16T16:54:57.137 に答える