片段与SlidingTabLayout

时间:2015-03-18 12:50:05

标签: android

我有一个带左导航抽屉的应用程序,在不同的片段之间切换。在其中一个片段中我想实现SlidingTabLayout

所以,我做的是从Google的SlidingTabLayout.java应用中复制了SlidingTabStrip.javaiosched。我在片段中使用了它们:

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <mynamespace.widget.SlidingTabLayout
        android:id="@+id/home_fragment_tabs"
        android:background="?attr/colorPrimary"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

    <android.support.v4.view.ViewPager
        android:id="@+id/home_fragment_pager"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:layout_width="match_parent" />


</LinearLayout>

然后在我的Fragment类中,在onCreateView方法中,我实例化了我的寻呼机和SlidingTabLayout,如下所示:

mPager = (ViewPager) view.findViewById(R.id.home_fragment_pager);
        mPager.setAdapter(new HomePagerAdapter(getActivity().getSupportFragmentManager()));
        mTabs = (SlidingTabLayout) view.findViewById(R.id.home_fragment_tabs);
        mTabs.setViewPager(mPager);

这是我的FragmentPagerAdapter:

class HomePagerAdapter extends FragmentPagerAdapter
    {
        private String[] tabs = { "Today", "This week", "With star" };
        private Fragment[] tabFragments = {
                new TodayTabFragment(),
                new WeekTabFragment(),
                new StarTabFragment()
        };

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

        @Override
        public Fragment getItem(int i)
        {
            return tabFragments[i];
        }

        @Override
        public int getCount()
        {
            return 3;
        }

        @Override
        public CharSequence getPageTitle(int position)
        {
            return tabs[position];
        }
    }

此外,我为每个标签都有单独的Fragment类和布局,这没什么特别的。它可以工作,但只要我用导航抽屉切换到其他片段,当我回来时,其中一个标签的内容就会消失。大多数情况下,它发生在第二个标签此外,如果我从导航抽屉中选择HomeFragment,则已显示何时,我会在SlidingTabLayout.java内的此行中获得nullpointerexception:mViewPager.setCurrentItem(i);

任何修复方法?我不知道该怎么做。我想我的代码可行,但内部活动。可以让它在片段内工作吗?

4 个答案:

答案 0 :(得分:1)

我也面临同样的问题。请使用FragmentStatePagerAdapter而不是FragmentPagerAdapter来解决这个问题。

答案 1 :(得分:0)

解决方案:

我所做的不是实现FragmentPagerAdapter,而是实现了PagerAdapter,然后我重写了instantiateItem(ViewGroup容器,int位置)方法和destroyItem()方法。

链接,帮助了我:http://developer.android.com/samples/SlidingTabsBasic/src/com.example.android.slidingtabsbasic/SlidingTabsBasicFragment.html

答案 2 :(得分:0)

您可以尝试将HomePagerAdapter的构造函数更改为:

public HomePagerAdapter(SupportFragmentManager fm)
{
    super(fm);
}

答案 3 :(得分:0)

当您开始交易而不是suuportfragmanager时,将其更改为childfragmentmanager