ViewPagerでいくつかFragmentを用意してタブで切り替えています。そのFragmentの1つの中にさらにViewPagerでページを構えているのですが、タブを2つ以上離して戻ってくるとページが表示されなくなってしまいます。
恐らくこちらのページで質問されているものと同じ現象だと思います。
https://teratail.com/questions/5601
で、そちらのサイトを参考にしながらやってると解決できたのですが、何がいけなかったのかよく分からずスッキリしません。
変更したのはViewPagerのsetAdapterなどの処理をonStartからonCreateViewに変えたことです。
###ソースコード
変更前
java
1public class HomeFragment extends Fragment{ 2 3 private ViewPager mViewPager; 4 private PagerAdapter mPagerAdapter; 5 6 public static HomeFragment newInstance() { 7 return fragment; 8 } 9 10 public HomeFragment() { 11 } 12 13 @Override 14 public View onCreateView(LayoutInflater inflater, ViewGroup container, 15 Bundle savedInstanceState) { 16 return inflater.inflate(R.layout.fragment_home, container, false); 17 } 18 19 @Override 20 public void onStart() { 21 super.onStart(); 22 23 mViewPager = (ViewPager) getView().findViewById(R.id.viewpager); 24 mPagerAdapter = new PagerAdapter(getChildFragmentManager()); 25 mViewPager.setAdapter(mPagerAdapter); 26 } 27 28 static class PagerAdapter extends FragmentPagerAdapter { 29 30 private static final int PAGE_COUNT = 5; 31 32 public PagerAdapter(FragmentManager fragmentManager) { 33 super(fragmentManager); 34 } 35 36 @Override 37 public Fragment getItem(int position) { 38 SampleFragment sampleFragment = SampleFragment.newInstance(position); 39 return sampleFragment; 40 } 41 42 @Override 43 public int getCount() { 44 return PAGE_COUNT; 45 } 46 } 47}
変更後
java
1public class HomeFragment extends Fragment{ 2 3 private ViewPager mViewPager; 4 private PagerAdapter mPagerAdapter; 5 6 public static HomeFragment newInstance() { 7 return fragment; 8 } 9 10 public HomeFragment() { 11 } 12 13 @Override 14 public View onCreateView(LayoutInflater inflater, ViewGroup container, 15 Bundle savedInstanceState) { 16 17 mViewPager = new ViewPager(getActivity()); 18 mViewPager.setId(R.id.viewpager); 19 mPagerAdapter = new PagerAdapter(getChildFragmentManager()); 20 mViewPager.setAdapter(mPagerAdapter); 21 22 return mViewPager; 23 } 24 25 26 static class PagerAdapter extends FragmentPagerAdapter { 27 28 private static final int PAGE_COUNT = 5; 29 30 public PagerAdapter(FragmentManager fragmentManager) { 31 super(fragmentManager); 32 } 33 34 @Override 35 public Fragment getItem(int position) { 36 SampleFragment sampleFragment = SampleFragment.newInstance(position); 37 return sampleFragment; 38 } 39 40 @Override 41 public int getCount() { 42 return PAGE_COUNT; 43 } 44 } 45}
なぜダメだったのか解説よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/04/12 21:42