2016-07-22 93 views
0

我试图在viewpager中显示一些片段。 我开始使用FragmentStatePagerAdapter getItem不叫

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

在第一时间一切正常,从NavigationDrawer的PlanFragment,但如果我从NavigationDrawer选择另一个片段,并回到PlanFragment事后viewpager显示没有内容(选项卡可见)。如果试图切换选项卡,选项卡的行为会变得非常疯狂,以便指示条停在中间位置,并且非常缓慢(指示条不会像往常一样跳到下一个选项卡条目)

我发现第二次不调用FragmentStatePagerAdapter中的getItem()方法。 我已经尝试使用getChildFragmentManager(),但这不起作用。我也使用API​​ Level 16,所以这是不可能使用的。 我正在使用android.support.v13作为片段支持。

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> 

回答

0

您需要某个setOffScreenPageLimit以便其他页面可用。默认值为1,因此在您滑动时没有任何可用内容。

+0

并且我应该设置多少个号码?为什么它会工作? – ForJ9

+1

这并没有改变任何东西。 – ForJ9

+0

嗨ForJ9,你能找到一个解决方案?我遇到了同样的问题。谢谢 – Jaz