所以我试图让我的主导航栏下面的标签栏和布局工作在我的主要活动上。Android ViewPager加载不正确的碎片
我似乎无法得到ViewPager/TabLayout(不确定哪个是问题的原因,这是新的)加载正确的片段。我已经阅读了大量的文档,并检查了一个以上的教程,看看我是否正确地做了这件事,看起来我正在做同样的事情,他们是...
OnTabSelectedListener
我的TabLayout
看到该选项卡更改正确,并在OnTabSelected
即时通话viewPager.setCurrentItem(tab.getPosition())
尝试设置我的视图项目,但它仍然无法正常工作。在第一次加载时,它会加载第一个和第二个标签(我可以通过从onCreate方法的片段发送的API请求来看到),并且当我点击其他标签时,它会一直加载错误的片段,有时甚至不会加载一个!
不知道这是否是相关的,但我切换标签我得到这样的警告:
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的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);
}
如果有人看到什么不对的请让我知道,我不能为我的生命得到这些该死的标签加载正确的片段。
提前致谢!
您是否调试过onTabUnselected和onTabReselected回调?他们工作正常吗? – IgorB
@IgorB我会检查 – Riptyde4
@IgorB unselected正在工作,但似乎重新选择没有被调用 – Riptyde4