簡體   English   中英

FragmentStatePagerAdapter getItem未調用

[英]FragmentStatePagerAdapter getItem not called

我正在嘗試在viewpager中顯示一些片段。 我使用以下方法從NavigationDrawer啟動PlanFragment

FragmentTransaction transaction = appCompatActivity.getFragmentManager().beginTransaction();
transaction.replace(R.id.activity_main_frame, navItem.getFragment()).commit();

第一次時一切正常,但是如果我從NavigationDrawer中選擇另一個片段,然后返回到PlanFragment,則viewpager不會顯示任何內容(選項卡可見)。 如果您嘗試切換選項卡,則選項卡的行為會變得瘋狂,以至於指示欄在中間停止並且非常緩慢(指示欄不會像往常一樣跳到下一個選項卡條目)

我發現FragmentStatePagerAdapter中的getItem()方法沒有第二次被調用。 我已經嘗試使用getChildFragmentManager(),但這沒有用。 我還使用API​​級別16,因此無法使用。 我正在使用android.support.v13作為Fragment Support。

public class PlanFragment extends Fragment {

    Toolbar toolbar;
    ViewPager viewPager;
    PagerAdapter adapter;

    @Override
    public View onCreateView(LayoutInflater inflater, final ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_vplan, container, false);

        ((AppCompatActivity) getActivity()).getSupportActionBar().setElevation(0);

        viewPager = (ViewPager) view.findViewById(R.id.viewpager);


        TabLayout tabLayout = (TabLayout) view.findViewById(R.id.tabs);

        tabLayout.removeAllTabs();
        tabLayout.addTab(tabLayout.newTab().setText("MONDAY"));
        tabLayout.addTab(tabLayout.newTab().setText("TUESDAY"));
        adapter = new PagerAdapter(getFragmentManager(), tabLayout.getTabCount());

        viewPager.setAdapter(adapter);

        viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));

        tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {

            @Override
            public void onTabSelected(TabLayout.Tab tab) {
                viewPager.setCurrentItem(tab.getPosition());
            }

            @Override
            public void onTabUnselected(TabLayout.Tab tab) {

            }

            @Override
            public void onTabReselected(TabLayout.Tab tab) {

            }
        });

        return view;
    }

    public class PagerAdapter extends FragmentStatePagerAdapter {
        int tabCount;

        public PagerAdapter(FragmentManager fm, int tabcount) {
            super(fm);
            this.tabCount = tabcount;
        }

        @Override
        public Fragment getItem(int position) {
            Log.i("ERROR", "YO");
            return new TestFragment();
        }

        @Override
        public int getCount() {
            return tabCount;
        }
    }
}

    <android.support.design.widget.AppBarLayout
        android:id="@+id/appbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">


        <android.support.design.widget.TabLayout
            android:id="@+id/tabs"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:layout_gravity="bottom">
        </android.support.design.widget.TabLayout>
    </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.CoordinatorLayout>

在viewpager中顯示的片段

public class TestFragment extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater, final ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_test, container, false);

        return view;
    }

}

TestFragment XML:

<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <android.support.v4.widget.NestedScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <TextView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:text="Nulla quis lorem ut libero malesuada feugiat. Pellentesque in ipsum id orci porta dapibus. Curabitur non nulla sit amet nisl tempus convallis quis ac lectus. Vivamus suscipit tortor eget felis porttitor volutpat." />
    </android.support.v4.widget.NestedScrollView>

您需要在某處設置setOffScreenPageLimit,以便其他頁面可用。 默認值為1,因此滑動時無可用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM