Android ViewPager Загрузка неверных фрагментов
Поэтому я пытаюсь получить панель вкладок и макет под моей основной панелью навигации, работая над моим основным видом деятельности.
Кажется, я не могу получить ViewPager / TabLayout (не уверен, что является причиной проблемы, новой для этого), чтобы загрузить правильный фрагмент. Я прочитал тонну документации и проверил более 1 учебника, чтобы увидеть, правильно ли я это делал, и кажется, что я делаю то же самое, что и они ...
OnTabSelectedListener
для меняTabLayout
правильно видит вкладку, и вOnTabSelected
Я зовуviewPager.setCurrentItem(tab.getPosition())
попытаться установить мой элемент просмотра, но он все еще не работает. При первой загрузке он загружает первую и вторую вкладки (я вижу через отправленный запрос API от фрагментов методов onCreate), а когда я нажимаю на другие вкладки, он последовательно загружает неправильный фрагмент, иногда даже не загружая одну !
Не уверен, что это связано, но я получаю это предупреждение при переключении вкладок:
03-03 16:24:22.940 16967-16967/com.sampleapp.app W/FragmentManager: moveToState: Fragment state for BlankFragment3{efddbec #2 id=0x7f0c007b android:switcher:2131492987:2} not updated inline; expected state 3 found 2
Я использую версию инструментов сборки23.0.2
и следующие зависимости:
compile 'com.android.support:appcompat-v7:23.1.1'
compile 'com.android.support:design:23.1.1'
compile 'com.android.support:support-v4:23.1.1'
Это мой код компоновки для моей главной навигационной панели:
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar1"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:popupTheme="@style/AppTheme.PopupOverlay" />
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar2"
android:layout_width="match_parent"
android:layout_height="10dp"
android:background="?attr/colorPrimary"
app:layout_scrollFlags="scroll|enterAlways"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
<android.support.design.widget.TabLayout
android:id="@+id/tab_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:tabMode="fixed"
app:tabGravity="fill"/>
</android.support.design.widget.AppBarLayout>
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
android:layout_margin="@dimen/fab_margin"
android:src="@android:drawable/ic_input_add" />
</android.support.design.widget.CoordinatorLayout>
Согласно более чем одному учебнику, вот код, который я использую для моего адаптера
public class TabsAdapter extends FragmentPagerAdapter{
private final List<Fragment> mFragmentList = new ArrayList<>();
private final List<String> mFragmentTitleList = new ArrayList<>();
public TabsAdapter(FragmentManager fm) {
super(fm);
}
public void addFrag(Fragment fragment, String title){
mFragmentList.add(fragment);
mFragmentTitleList.add(title);
}
@Override
public Fragment getItem(int position) {
return mFragmentList.get(position);
}
@Override
public int getCount() {
return mFragmentList.size();
}
@Override
public CharSequence getPageTitle(int position) {
return mFragmentTitleList.get(position);
}
}
И вот как я настраивал свой viewpager и tablayout
MainActivity's onCreate:
ViewPager = (ViewPager) findViewById(R.id.viewpager);
setupViewPager(mViewPager); // Method defined below
TabLayout tabLayout = (TabLayout) findViewById(R.id.tab_layout);
tabLayout.setupWithViewPager(mViewPager);
tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
mViewPager.setCurrentItem(tab.getPosition());
Log.w("Tab Selection", String.valueOf(tab.getPosition()));
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
});
И наконец, мой метод setupViewPager:
private void setupViewPager(ViewPager viewPager) {
TabsAdapter adapter = new TabsAdapter(getSupportFragmentManager());
adapter.addFrag(new BlankFragment1(), "One");
adapter.addFrag(new BlankFragment2(), "Two");
adapter.addFrag(new BlankFragment3(), "Three");
viewPager.setAdapter(adapter);
}
Если кто-то видит что-то не так с этим, пожалуйста, дайте мне знать, я не могу получить эти проклятые вкладки, чтобы загрузить нужный фрагмент.
Спасибо заранее!