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