2016-06-08 80 views
0

我已經使用了抽屜項目的片段,每個片段都包含非固定的選項卡。我使用PagerSlidingTabStrip庫來顯示選項卡。當片段初始化時,它顯示第一個ViewPager,但是當我點擊在第二個選項卡上顯示第三個ViewPager。同樣,最後一個ViewPager從不顯示。PagerSlidingTabStrip顯示錯誤ViewPager

標籤XML

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 

    <com.astuetz.PagerSlidingTabStrip 
     android:id="@+id/tabs" 
     android:layout_width="match_parent" 
     android:layout_height="48dp" 
     android:textColor="#000000" 
     android:textSize="@dimen/sp_fifteen" 
     app:pstsDividerColor="@color/red" 
     app:pstsIndicatorColor="@color/black" 
     app:pstsTextAllCaps="true" 
     app:pstsUnderlineColor="@color/gray" /> 

    <android.support.v4.view.ViewPager 
     android:id="@+id/viewpager" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" /> 

</LinearLayout> 

適配器類:

private PagerSlidingTabStrip tabStrip; 
private Adapter adapter; 

public static TowerOneTabs newInstance() { 
    TowerOneTabs fragment = new TowerOneTabs(); 
    return fragment; 
} 


@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View mView = getActivity().getLayoutInflater().inflate(R.layout.tower_tabs_layout, null); 
    super.onCreate(savedInstanceState); 

    ViewPager viewPager = (ViewPager) mView.findViewById(R.id.viewpager); 
    setupViewPager(viewPager); 

    tabStrip = (PagerSlidingTabStrip) mView.findViewById(R.id.tabs); 
    tabStrip.setViewPager(viewPager); 
    tabStrip.setOnPageChangeListener(this); 
    return mView; 

} 


@Override 
public void onResume() { 
    super.onResume(); 
    tabStrip.setOnPageChangeListener(this); 
} 


@Override 
public void onDestroyView() { 
    super.onDestroyView(); 
} 

private void setupViewPager(ViewPager viewPager) { 
    //Here we have to pass ChildFragmentManager instead of FragmentManager. 
    adapter = new Adapter(getChildFragmentManager()); 
    adapter.addFragment(TowerOne.newInstance(), getResources().getString(R.string.tower1)); 
    adapter.addFragment(T11.newInstance(), Constants.KEY_T1_1); 
    adapter.addFragment(T12.newInstance(), Constants.KEY_T1_2); 
    adapter.addFragment(T13.newInstance(), Constants.KEY_T1_3); 
    adapter.addFragment(T14.newInstance(), Constants.KEY_T1_4); 
    adapter.addFragment(T15.newInstance(), Constants.KEY_T1_5); 
    viewPager.setAdapter(adapter); 
} 

@Override 
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 

} 

@Override 
public void onPageSelected(int position) { 
    switch (position) { 
     case 0: 
      // BaseActivity.getTitleView().setText(Constants.KEY_TOWER_ONE); 
      break; 
     case 1: 
      mCallback.showDialog(); 

      break; 
     case 2: 
      mCallback.showDialog(); 
      break; 
     case 3: 
      mCallback.showDialog(); 

      break; 
     case 4: 
      mCallback.showDialog(); 

      break; 
     case 5: 
      mCallback.showDialog(); 

      break; 
     default: 

      break; 
    } 

} 

@Override 
public void onPageScrollStateChanged(int state) { 

} 

static class Adapter extends FragmentPagerAdapter { 
    private final List<Fragment> mFragments = new ArrayList<>(); 
    private final List<String> mFragmentTitles = new ArrayList<>(); 

    public Adapter(android.support.v4.app.FragmentManager fm) { 
     super(fm); 
    } 

    public void addFragment(Fragment fragment, String title) { 
     mFragments.add(fragment); 
     mFragmentTitles.add(title); 
    } 

    @Override 
    public Fragment getItem(int position) { 
     return mFragments.get(position); 
    } 

    @Override 
    public int getCount() { 
     return mFragments.size(); 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
     return mFragmentTitles.get(position); 
    } 
} 

回答

1

我檢查這個代碼和它的工作。如果你想添加額外的參數(比如常量),你可以編輯SampleFragmentPagerAdapter的addFragment方法。

public class MainActivity extends AppCompatActivity { 
 

 

 

 
    @Override 
 
    protected void onCreate(Bundle savedInstanceState) { 
 

 
     super.onCreate(savedInstanceState); 
 
     setContentView(R.layout.activity_main); 
 

 

 
     ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager); 
 
     //viewPager.setAdapter(new SampleFragmentPagerAdapter(getSupportFragmentManager())); 
 
     setupViewPager(viewPager); 
 

 
     // Give the PagerSlidingTabStrip the ViewPager 
 
     PagerSlidingTabStrip tabsStrip = (PagerSlidingTabStrip) findViewById(R.id.tabs); 
 
     // Attach the view pager to the tab strip 
 
     tabsStrip.setViewPager(viewPager); 
 

 

 

 

 
    } 
 

 
    private void setupViewPager(ViewPager viewPager) { 
 
     SampleFragmentPagerAdapter adapter = new SampleFragmentPagerAdapter(getSupportFragmentManager()); 
 
     adapter.addFragment(new OneFragment(), "ONE"); 
 
     adapter.addFragment(new TwoFragment(), "TWO"); 
 
     viewPager.setAdapter(adapter); 
 
    } 
 

 

 
    public class SampleFragmentPagerAdapter extends FragmentPagerAdapter { 
 
     private final List<Fragment> mFragmentList = new ArrayList<>(); 
 
     private final List<String> mFragmentTitleList = new ArrayList<>(); 
 

 
     public SampleFragmentPagerAdapter(FragmentManager fm) { 
 
      super(fm); 
 
     } 
 

 
     @Override 
 
     public int getCount() { 
 
      return mFragmentList.size(); 
 
     } 
 

 
     @Override 
 
     public Fragment getItem(int position) { 
 
      return mFragmentList.get(position); 
 
     } 
 

 
     public void addFragment(Fragment fragment, String title) { 
 
      mFragmentList.add(fragment); 
 
      mFragmentTitleList.add(title); 
 
     } 
 

 
     @Override 
 
     public CharSequence getPageTitle(int position) { 
 
      return mFragmentTitleList.get(position); 
 
     } 
 
    } 
 

 

 

 

 

 

 

 
}

+0

我試着用你的代碼,但它並沒有解決我的問題。可能是你的代碼工作正常少選項卡數量。 – musica

+0

你有多少標籤? –

+0

我有5個片段,每個片段都有3個以上的選項卡。 – musica