1

мой взгляд пейджера, как:Опции меню показа на различных фрагментов (в основном в соседний фрагмент) Адаптер

public Pager(FragmentManager fm, int tabCount) { 
     super(fm); 
     this.tabCount = tabCount; 
    } 

    @Override 
    public Fragment getItem(int position) { 
     switch (position) { 
      case 0: 
       return new frag1(); 
      case 1: 
       return new frag2(); 
      case 2: 
       return new frag1(); 
      case 3: 
       return new frag2(); 
      case 4: 
       return new frag1(); 
      default: 
       return null; 
     } 
    } 

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

как я установить tablayout и ViewPager в классе Java:

for (int i = 0; i < 5; i++) { 
      tabLayout.addTab(tabLayout.newTab()); 
     } 

    Pager adapter = new Pager(getSupportFragmentManager(), tabLayout.getTabCount()); 
    viewPager.setAdapter(adapter); 
    viewPager.beginFakeDrag(); 
    viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout)); 

Я получаю странная ошибка выглядит так:

W/FragmentManager: moveToState: Fragment state for frag2{2428405 #1 id=0x7f0c006a} not updated inline; expected state 3 found 2 

так как я могу исправить эту проблему? Я получаю ответы от стека, но он не решает мою проблему, , чтобы кто-нибудь знал об этом, любезно помогите мне!

+0

Пробуйте эту ссылку. http://stackoverflow.com/questions/35783098/android-viewpager-loading-incorrect-fragments – QEMU

+0

Я тоже это пробовал, но не работал для меня! @Manish – Sam

ответ

0

Заменить эту линию viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout)); с tabLayout.setTabsFromPagerAdapter(adapter);

+0

Во-первых, я использовал этот метод, затем из стека я изменяю addOnPageChangeListener. :) @Manish – Sam

+0

Хорошо .. я поделюсь своим кодом. Я делаю то же самое. Поскольку ваш xml будет содержать TabLayout с ViewPager – QEMU

+0

yeh sure! Спасибо за помощь. @Manish – Sam

0

Попытка подключения tabLayout с viewPager с tabLayout.setupWithViewPager(viewPager) вместо добавления вкладок вручную в петле.

0

available_bus_fragment.xml

<android.support.design.widget.TabLayout 
    android:id="@+id/tabs" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    app:tabGravity="fill" 
    android:background="#d4d4d4" 
    app:tabMode="fixed" /> 

<android.support.v4.view.ViewPager 
    android:id="@+id/viewpager" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="#e8e8e8" 
    app:layout_behavior="@string/appbar_scrolling_view_behavior" /> 

ViewPagerAdapter.java является адаптер для ViewPager.

public class ViewPagerAdapter extends FragmentStatePagerAdapter { 


public ViewPagerAdapter(FragmentManager manager) { 
    super(manager); 
} 

@Override 
public int getItemPosition(Object object) { 
    return POSITION_NONE; 
} 

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


@Override 
public CharSequence getPageTitle(int position) { 
    return String.valueOf(position); 
} 

@Override 
public Fragment getItem(int position) { 
    switch (position) { 
     case 0: 
      Fragment tab1 = new YourFragment1(); 
      return tab1; 
     case 1: 
      Fragment tab2 = new YourFragment1(); 
      return tab2; 
     case 2: 
      Fragment tab3 = new YourFragment1(); 
      return tab3; 
    } 
    return null; 
}} 

Это ваш класс, где вы хотите установить адаптер Viewpager.

public class MyFragment extends Fragment { 
View rootView; 
ViewPagerAdapter adapter; 
TabLayout tabLayout; 
ViewPager viewPager; 
private int[] tabIcons = { 
     R.drawable.tabclock, 
     R.drawable.clock, 
     R.drawable.tab_rupee 
}; 

@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
    rootView = getLayoutInflater(savedInstanceState).inflate(R.layout.available_bus_fragment, null); 
    tabLayout = (TabLayout) rootView.findViewById(R.id.tabs); 


    viewPager = (ViewPager) rootView.findViewById(R.id.viewpager); 
    adapter = new ViewPagerAdapter(getChildFragmentManager()); 

    viewPager.setAdapter(adapter); 
    tabLayout.setupWithViewPager(viewPager); 
    tabLayout.setTabsFromPagerAdapter(adapter); 
    setupTabIcons(); 

    return rootView; 
} 

private void setupTabIcons() { 
    tabLayout.getTabAt(0).setIcon(tabIcons[0]).setTag("Departure").setText("Departure"); 
    tabLayout.getTabAt(1).setIcon(tabIcons[1]).setTag("Duration").setText("Duration"); 
    tabLayout.getTabAt(2).setIcon(tabIcons[2]).setTag("Price").setText("Price"); 
} }