1

My view pager's Adapter is like:

    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;
    }
}

how i set the tablayout and viewpager in java class:

 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));

I am getting weird error look like this:

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

so how can i fix this issue? I am getting answers from stack but it doesn't solve my issue, so anyone have any knowledge about this, kindly help me!

Sam
  • 171
  • 1
  • 11

3 Answers3

0

Replace this line viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout)); with tabLayout.setTabsFromPagerAdapter(adapter);

Manish Singh Rana
  • 822
  • 1
  • 13
  • 26
0

Try connecting the tabLayout with the viewPager with tabLayout.setupWithViewPager(viewPager) instead of adding the tabs manually in the loop.

Tamer
  • 55
  • 3
  • 4
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 is adapter for 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;
}}

This is your class where you set adapter of 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");
} }
Manish Singh Rana
  • 822
  • 1
  • 13
  • 26