[英]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.