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

我如何设置Java类tablayout和viewpager:

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

你肯定!感谢帮助。 @Manish – Sam

0

尝试用viewPagertabLayout.setupWithViewPager(viewPager)连接tabLayout而不是在环手动添加的选项卡。

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