3

奇妙な UI の問題があります。簡単に言えば、Fragment 内に ViewPager があります (「A」と呼びましょう)。ここまでは、ViewPager 内に Fragments を表示することは問題ありません。

戻るボタンを押すと問題が発生します。戻るボタンは Fragment A から正常にポップオフし、前の Fragment に戻りますが、この移行中、ViewPager の内容は完全に消去されます。

遷移アニメーションがあるので、これは非常に明白です。なぜこれが起こっているのか分かりません。これは、ネストされたフラグメントを持つ唯一の画面であるこの特定の画面でのみ発生するため、ネストされたフラグメントに関係していることは明らかです。

コード スニペット

Initial Fragment はアイテムのリストを表示します。1つのアイテムをクリックします....

@Override
public void onListItemClick(ListView l, View v, int position, long id) {
    FragmentManager fm = getFragmentManager();
    Fragment f = fm.findFragmentByTag("some_tag_name");
    if(f == null) {
        f = SomFragment.newInstance(...);
    }  

    getFragmentManager()
            .beginTransaction()
            .setCustomAnimations(R.anim.slide_in_right, R.anim.slide_out_left,
                                 R.anim.slide_in_left, R.anim.slide_out_right)
            .replace(R.id.frame, f)
            .addToBackStack(null)
            .commit();
}

これで、新しい Fragment が ViewPager とともに表示されます。ViewPager が初期化されています...

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {    
    mPager = (ViewPager) view.findViewById(R.id.viewpager);
    mPagerAdapter = new SomeAdapter(getChildFragmentManager());
    mPager.setAdapter(mPagerAdapter);    
}

onBackPressed親アクティビティやその他の面白いビジネスをオーバーライドしていません。とても簡単です。

4

2 に答える 2

0

onCreateView() を使用します (onViewCreated() ではありません):

 @Override
 public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
   View rootView = inflater.inflate(R.layout.pager, container, false);                                                   

   mPager = (ViewPager)rootView.findViewById(R.id.viewpager);
   mPagerAdapter = new SomeAdapter(getChildFragmentManager());
   mPager.setAdapter(mPagerAdapter); 
   return rootView;   
 }
于 2015-03-12T20:36:15.360 に答える