Android ViewPager Falsche Fragmente laden
So versuche ich, eine Tab-Leiste und ein Layout unter meiner Hauptnavigationsleiste für meine Hauptaktivität zu erstellen.
Ich kann den ViewPager / TabLayout (nicht sicher, welche Ursache für das Problem verantwortlich ist, dies ist neu) nicht zum Laden des richtigen Fragments bringen. Ich habe eine Menge Dokumentation durchgelesen und mehr als ein Tutorial durchgesehen, um festzustellen, ob ich das richtig gemacht habe, und anscheinend mache ich das Gleiche wie sie ...
DasOnTabSelectedListener
für meinTabLayout
sieht, dass sich die Registerkarte richtig ändert, und inOnTabSelected
Ich rufe anviewPager.setCurrentItem(tab.getPosition())
, um zu versuchen, mein Viewpager-Element festzulegen, aber es funktioniert immer noch nicht. Beim ersten Laden werden die ersten und zweiten Registerkarten geladen (ich kann über eine gesendete API-Anfrage von den Fragmenten der onCreate-Methoden sehen), und wenn ich auf die anderen Registerkarten klicke, wird durchgehend das falsche Fragment geladen, manchmal wird überhaupt kein Fragment geladen !
Not sure, wenn dieses zusammenhängt, aber ich erhalte diese Warnung, während ich Vorsprünge wechsle:
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
Ich benutze Build Tools Version23.0.2
und die folgenden Abhängigkeiten:
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'
Dies ist mein Layoutcode für meine Hauptnavigationsleiste:
<?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>
Wie in mehr als einem Tutorial, hier ist der Code, den ich für meinen Adapter verwende
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);
}
}
Und so richte ich meinen Viewpager und mein Tablayout ein
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) {
}
});
Und schließlich meine setupViewPager-Methode:
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);
}
Wenn jemand diesbezüglich etwas falsch sieht, lassen Sie es mich bitte wissen. Ich kann für mein ganzes Leben diese verdammten Tabs nicht bekommen, um das richtige Fragment zu laden.
Vielen Dank vor der Zeit!