8

Android ViewPager のライフサイクルがめちゃくちゃになっていて、アプリの構造に何か問題があるのではないかと考え始めています。そのため、次のことができるかどうか確認をお願いします。

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

ViewPager を新しい 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 は (onCreateView から) 正常にリロードされますが、内部の ListFragment は表示されません。私のListFragmentのオブジェクトはまだ生きているように見えますが、ビューを失ったようです.onCreateViewはそれを再作成するために呼び出されていません.

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

4

1 に答える 1

26

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

別のアプリケーションを調べてみたところ、Gmail と Google Play には私のようなナビゲーションがあることがわかりました (新しいアクティビティを作成せずに、ViewPager を新しいフラグメントに置き換えています)。

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

ViewPagerAdapter adapter = new ViewPagerAdapter(getChildFragmentManager());
于 2013-03-13T13:40:28.577 に答える