2016-06-08 8 views
0

Ich habe Fragmente für Schubladenelemente verwendet, jedes Fragment besteht aus nicht fixierten Registerkarten. Ich verwende die PagerSlidingTabStrip-Bibliothek zum Anzeigen von Registerkarten. Wenn das Fragment initialisiert wird, zeigt es den 1. ViewPager, der korrekt ist, aber wenn ich klicke Auf der 2. Registerkarte wird der 3. ViewPager angezeigt. Ebenso wird der letzte ViewPager nie angezeigt.PagerSlidingTabStrip zeigt falschen ViewPager

Tab 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> 

Adapter Klasse:

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); 
    } 
} 

Antwort

1

überprüfte ich diesen Code und seine Arbeiten. Wenn Sie zusätzliche Parameter (wie Konstanten) hinzufügen möchten, können Sie die addFragment-Methode von SampleFragmentPagerAdapter bearbeiten.

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

Ich habe versucht, den Code verwenden, aber es hat mein Problem nicht gelöst. Möglicherweise funktioniert Ihr Code für weniger Tabs. – musica

+0

Wie viele Tabs haben Sie in Ihrem? –

+0

ich habe 5 Fragmente jedes Fragment hat mehr als 3 Tabs. – musica

Verwandte Themen