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!

Antworten auf die Frage(8)

Ihre Antwort auf die Frage