所以我試圖讓我的主導航欄下面的標籤欄和佈局工作在我的主要活動上。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