1

これが私が抱えている問題です。ビュー V にある FragmentPagerAdapter FPA に含まれるフラグメント F を持つアクティビティ A があります (A->V->FPA->F)。

A が破棄される (またはこの場合はスワップ アウトされる) と、F がアタッチされ、V にある FPA になります。ただし、A が再作成されると (たとえば、誰かが [戻る] ボタンを押してアクティビティに戻る)、V FPA が存在しないため、F は (アタッチされた状態で) 再作成されますが、存在しないものに対して作成されるため、ビュー階層にはまったく含まれません。次に、FPA がこのフラグメントで instanceiateState を試行すると、それをアタッチしようとしますが、既に何もない状態にアタッチされているため何もしません。

これを修正するには明らかにいくつかの方法があります (たとえば、V と FPA をアクティビティの onCreate に存在させて、フラグメントが作成されたときにどこかに移動できるようにします)、FPA と FPA を引き続き遅延して作成したいと思いますVは必要な時だけ。

したがって、F の状態を onDestroy() で detached に更新することが望ましいようです。ただし、状態は onPause() に保存されます。つまり、ここでは運が悪いということです。

AのonDestroy()でFの保存された状態を更新する方法はありますか? 「アクティビティが破壊された場合、このフラグメントを復元しないでください」と言う方法はありますか? 私が考慮していない、これについての他の明らかな考え方はありますか?ここで物事を間違った方向に進めているように感じます。

4

2 に答える 2

1

あなたが書いた:

私が考慮していない、これについての他の明らかな考え方はありますか?

これはタイトルの質問に直接答えるものではありませんがFragmentViewPager.

を初期化するで にタグを付けることで、 が破棄されFragmentたときの状態を保存できます。ActivityFragmentActivityFragment

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.photos_pager_activity);

    MyImageFragment fragment;
    if (savedInstanceState != null) {
        fragment = (MyImageFragment) getFragmentManager().findFragmentByTag("my_image_fragment_tag");
    } else {
        fragment = new MyImageFragment();
        getFragmentManager().beginTransaction().add(android.R.id.content, fragment, "my_image_fragment_tag").commit(); 
    }

以下も参照してください。

フラグメントタグの使用

ViewPager とフラグメント — フラグメントの状態を保存する正しい方法は?

于 2012-11-30T09:59:11.170 に答える
1

で問題が発生しましたFragmentPagers。私がしていることは、アクティビティに null バンドルを渡し、onCreate()作成されるたびにすべてをゼロから作成することです。そのようです:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(null);
    // do my stuff
}

この方法では、アクティビティが再作成されたときにフラグメントが渡されません。

于 2012-11-30T09:25:21.757 に答える