6

アンドロイドのViewPagerのライフサイクルが本当にうんざりです。私のアプリの構造に何か間違っていると思っています。だから私は次のことができるかどうかの確認をしたい:置き換えられたViewPagerとBackStackのライフサイクル?

  • 私はいくつかのタブを示すアプリケーションがあります。これらのタブの1つでは、ViewPagerが表示されます.ViewPagerには2つのListFragmentがあります。これらのListFragments は、ViewPagerのonCreateイベントで作成されます。
  • ListFragmentsの1つでアイテムをクリックすると、ViewPagerFragment全体が別のフラグメント(別のListFrament)に置き換えられます。

ここでは、私はそこから新しいListFragment

FragmentManager fm = getFragmentManager(); 
android.support.v4.app.FragmentTransaction ft = fm.beginTransaction(); 

ft.replace(R.id.container, new RequestForm(requestsList.get(itemIndex))); 
ft.addToBackStack(null); 
ft.commit(); 

でViewPagerを置き換えるために使用するコードです、すべてが正常に動作しています。しかし、ユーザーが[戻る]ボタンをクリックした場合、私は次のような状況を取得:

  • をViewPagerは(onCreateViewから)細かいリロードされますが、ListFragment は内部まで表示されません。私のListFragmentのオブジェクトはまだ生きているようですが、ビューが失われているようですが、 ViewPagerがアウトされている間にオブジェクトが眠らなかったので、onCreateViewは で再作成されていません。

私の意図は、私がやろうとしていることがAndroidの考え方で大丈夫かどうかを知ることなので、ここでコードを投稿していません。私がしたいことをアーカイブするためにAndroid SDKと戦わなければなりませんか?

答えて

19

あなたが見るとおり、私はAndroidユーザーではありません(私はiOSのUIについてもっと知っています)。これが私が混乱した理由です。

さまざまなアプリケーションを探してみたら、GmailとGoogle Playのナビゲーションがちょっと似ていることがわかりました(新しいアクティビティを作成せずにViewPagerを新しいフラグメントで置き換える)。

私の問題では、構造上の問題ではありませんでした。 FragmentStatePagerAdapterを作成するときは、必ずgetFragmentManager()ではなくgetChildFragmentManager()を使用してください。

ViewPagerAdapter adapter = new ViewPagerAdapter(getChildFragmentManager()); 
+1

上記の説明と全く同じ問題があり、getChildFragmentManagerを渡してアダプタを設定すると問題が解決しました。ありがとう!最後に表示された位置を保存し、バックスタックをポップするときに復元する方法を理解しなければなりません。 – speedynomads

+2

私の人生を保存しました。ありがとう。 – Paul

+0

すごい!ありがとう! –

関連する問題