1

次の構造を持つアプリケーションを構築しています。

MainActivity -> Fragment1
             -> Fragment2 -> Fragment3

ここで、Fragment1 は FrameLayout の MainActivity でホストされています。ユーザーが Fragment1 のオプションをクリックすると、ViewPager で Fragment3 をホストする Fragment2 に切り替わります。

問題は、ユーザーがアプリを閉じずに Android ホームに移動し、しばらくの間 Android によってアプリが強制終了され、ユーザーが最近のアプリ リストからアプリを再開しようとすると、Fragment3 に空白の画面が表示されることです。

ここに私がフラグメントトランザクションに使用している方法があります

public void requestChangeFragment(Fragment newFragment,String tag,Fragment oldFragment, int anim_in, int anim_out){
        if(isStopped()){
            return;
        }
        mFragmentManager = getSupportFragmentManager();
        android.support.v4.app.FragmentTransaction fragmentTransaction = mFragmentManager.beginTransaction();
        fragmentTransaction.setCustomAnimations(anim_in,anim_out,anim_in,anim_out);
        fragmentTransaction.add(R.id.main_frame_layout, newFragment, tag);
        Log.i("FragMngr","Animations set in "+anim_in+" out "+anim_out);
        fragmentTransaction.addToBackStack(tag);
        int count = mFragmentManager.getBackStackEntryCount();
        String log="";
        fragmentTransaction.commit();
        for(int i=0;i<count;i++){
            android.support.v4.app.FragmentManager.BackStackEntry backStackEntry = mFragmentManager.getBackStackEntryAt(i);
            log += "count "+i+" name "+backStackEntry.getName()+"\n";
        }
        Log.d("FragMngr","BackStack trace after adding is\n "+log);
        if(oldFragment!=null) {
            if(oldFragment.isResumed()) {
                oldFragment.onPause();
            }
        }
        topFragment = newFragment;
    }

requestChangeFragment()interfaceで実装されているの助けを借りて、実行中のフラグメントから呼び出されMainActivityます。

4

1 に答える 1

0

いくつかの調査を行った後、アプリが使用されていないときにAndroidガベージコレクターがアプリを強制終了するたびに、フラグメントの現在の状態を保存する保存されたインスタンスであるという問題を特定しました。そのため、停止したアプリを再開しようとすると、アプリを一時停止する前に選択されていたフラグメントが移動します。しかし、フラグメントには、it Main クラスから受け取ったはずのデータがありません。

解決策 : onCreate メソッドの MainActivity に保存されているインスタンスをクリアします。または、保存されたインスタンスの状態に値を保存している場合は、保存されたインスタンスの状態に関連する操作を実行し、値をクリアしてから呼び出しますsuper.onCreate(savedInstanceState)

于 2016-07-13T07:34:42.377 に答える