切换片段时没有标签栏

时间:2015-08-05 17:39:49

标签: android android-support-library android-toolbar

我有1个Activity,里面有2个片段,比如FragmentA和FragmentB。 活动布局只有一个空的FrameLayout来嵌入片段。 片段A没有工具栏,并且是“第一次运行”片段,仅在应用程序第一次运行时显示, 片段B有一个工具栏,一个标签栏和一个viewpager。

当活动第一次开始时,FragmentA会正确显示。 当FragmentA结束时,Activity切换到FragmentB。 这里有一些奇怪的事情发生在工具栏上:只显示应用程序的标题,没有标签,没有工具栏,尽管它应该有空格。实际上,当您通过开发人员选项查看边界时,看起来好像绘制了2个选项卡(我们的应用程序中应该有4个)。

这是没有开发者选项边界的屏幕截图 enter image description here

当您旋转屏幕或退出应用程序并再次打开它时(活动会在重新创建时直接显示FragmentB),一切都恢复正常:FragmentB显示正确的选项卡和工具栏。

我做错了什么?或者这是支持库中的错误吗?

片段B布局如下所示:

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
    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.support.design.widget.AppBarLayout
        android:layout_height="wrap_content"
        android:layout_width="match_parent">

        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_height="wrap_content"
            android:layout_width="match_parent"
            app:layout_scrollFlags="scroll|enterAlways"/>

        <android.support.design.widget.TabLayout
            android:id="@+id/tabs"
            android:layout_height="wrap_content"
            android:layout_width="match_parent"
            app:layout_scrollFlags="scroll|enterAlways"/>

    </android.support.design.widget.AppBarLayout>

    <android.support.v4.view.ViewPager
        android:layout_height="match_parent"
        android:layout_width="match_parent"
        android:id="@+id/viewpager"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"/>

</android.support.design.widget.CoordinatorLayout>

片段B的代码是

public class FragmentB extends BaseFragment
{

    @Bind(R.id.tabs)
    TabLayout tabLayout;

    @Bind(R.id.viewpager)
    ViewPager viewPager;

    @Bind(R.id.toolbar)
    Toolbar toolbar;

    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState)
    {
        final View view = inflater.inflate(R.layout.fragment_b, container, false);

        ButterKnife.bind(this, view);

        BaseActivity activity = (BaseActivity) getActivity();
        activity.setSupportActionBar(toolbar);

        this.viewPager.setAdapter(new SomePagerAdapter(getChildFragmentManager(), getActivity()));

        this.tabLayout.setupWithViewPager(viewPager);

        return view;
    }
}

SomePagerAdapter的代码

public class SomePagerAdapter extends FragmentPagerAdapter
{
    private String[] tabNames;

    public SomePagerAdapter(FragmentManager fm, Context context)
    {
        super(fm);
        tabNames = new String[]{
            context.getString(R.string.tab_title_1),
            context.getString(R.string.tab_title_2),
            context.getString(R.string.tab_title_3),
            context.getString(R.string.tab_title_4)
        };
    }

    @Override
    public Fragment getItem(int position)
    {
        try
        {
            switch (position)
            {
                case 0:
                    return Tab1Fragment.class.newInstance();
                default:
                    return PlaceholderFragment.class.newInstance();
            }
        }
        catch (InstantiationException e)
        {
            Log.e(this.getClass().getSimpleName(), e.getMessage());
        }
        catch (IllegalAccessException e)
        {
            Log.e(this.getClass().getSimpleName(), e.getMessage());
        }
        return null;
    }

    @Override
    public int getCount()
    {
        return tabNames.length;
    }

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

我使用以下版本的支持库:

'com.android.support:appcompat-v7:22.2.1'
'com.android.support:design:22.2.1'

1 个答案:

答案 0 :(得分:1)

Google似乎在支持设计库的第23版中解决了这个问题