PagerSlidingTabStrip显示错误的ViewPager

时间:2016-06-08 06:01:51

标签: android android-fragments pagerslidingtabstrip

我已经使用片段作为抽屉项目,每个片段都包含非固定标签。我使用PagerSlidingTabStrip库来显示标签。片段初始化时显示第一个ViewPager,这是正确的,但是当我点击第二个标签时它显示第3个ViewPager.Likewise,最后一个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>

适配器类:

 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 个答案:

答案 0 :(得分: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);
        }
    }







}