2015-06-13 3 views
1

Я использую библиотеку поддержки дизайна. У меня есть фрагмент и внутри этого фрагмента у меня есть еще один фрагмент, который имеет вид пейджера с 3 новым фрагментомTabLayout застревает с viewpager при изменении ориентации экрана

Мой код фрагмент -

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 

    <android.support.design.widget.TabLayout 
     android:id="@+id/tab_layout" 
     android:layout_width="match_parent" 
     android:layout_height="?attr/actionBarSize" 
     android:background="@color/colorPrimary" 
     app:tabIndicatorColor="@android:color/white" 
     app:tabIndicatorHeight="4dp" 
     app:tabMode="fixed" /> 

    <android.support.v4.view.ViewPager 
     android:id="@+id/pager" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 

</LinearLayout> 

Фрагмент Java-код

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

     TabLayout tabLayout = (TabLayout) v.findViewById(R.id.tab_layout); 
     tabLayout.setTabGravity(TabLayout.GRAVITY_FILL); 
     tabLayout.setTabTextColors(Color.parseColor("#ffffff"), Color.parseColor("#000000")); 
     ViewPager viewPager = (ViewPager) v.findViewById(R.id.pager); 
     viewPager.setOffscreenPageLimit(3); 
     viewPager.setAdapter(new SectionPagerAdapter(getActivity().getSupportFragmentManager())); 
     tabLayout.setupWithViewPager(viewPager); 
     return v; 
    } 

    public class SectionPagerAdapter extends FragmentPagerAdapter { 

     public SectionPagerAdapter(FragmentManager fm) { 
      super(fm); 
     } 

     @Override 
     public Fragment getItem(int position) { 
      switch (position) { 
       case 0: 
        return new Tab1(); 
       case 1: 
        return new Tab2(); 
       case 2: 
        return new Tab3(); 

       default: 
        return null; 
      } 
     } 

     @Override 
     public int getCount() { 
      return 3; 
     } 

     @Override 
     public CharSequence getPageTitle(int position) { 
      switch (position) { 
       case 0: 
        return "Tab 1"; 
       case 1: 
        return "Tab 2"; 
       case 2: 
        return "Tab 3"; 

       default: 
        return ""; 
      } 
     } 
    } 

Теперь его все работает отлично, но когда я поворачиваю экран, проведите по экрану на просмотрщик, который работает неправильно. Я имею в виду, что он застрял между двумя вкладками. Также индикатор табуляции также застревает между вкладками. Переход от 1-й до 3-й вкладки занимает почти 6-7 секунд. Также при прокручивании после вращения есть только один фрагмент табуляции, который ранее был выбран перед вращением.

ответ

0

Вы можете использовать FragmentStatePagerAdapter вместо FragmentPagerAdapter

0

В вашем методе onCreateView(), попробуйте изменить это:

viewPager.setAdapter(new SectionPagerAdapter(getActivity().getSupportFragmentManager())); 

к этому:

viewPager.setAdapter(new SectionPagerAdapter(getChildFragmentManager())); 

У меня были такие же симптомы, как вы сделал, пока я не сделал это изменение.

Смежные вопросы