Android~为什么FragmentPageAdapter会清除我的Layout> TabItem图标?

时间:2018-01-03 05:00:27

标签: android android-fragments android-viewpager

以下是我的主要活动的布局文件:

<android.support.design.widget.TabLayout
    android:id="@+id/tabLayout"
    android:layout_width="0dp"
    android:layout_height="39dp"
    android:layout_marginEnd="16dp"
    android:layout_marginTop="8dp"
    app:layout_constraintEnd_toStartOf="@+id/settingsButton"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent">

        <android.support.design.widget.TabItem
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:icon="@drawable/ic_mic_black_36dp" />

        <android.support.design.widget.TabItem
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:icon="@drawable/ic_folder_black_36dp" />

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

如果除了运行包含上述内容的代码之外什么都不做,TabItem会显示图标,但是当我将TabLayout设置为FragmentPageAdapter时,图标会消失,留下空白。

以下是我的FragmentPageAdpater:

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

    public ViewPagerFragmentAdapter(FragmentManager manager)
    {
        super(manager);
    }

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

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

    public void addFragment(Fragment fragment)
    {
        mFragmentList.add(fragment);
    }
}

为什么当我去 tabLayout.setupWithViewPager(viewPager); 这些图标现在消失了?我只显示图标而不是文字。只添加了2个片段,因此只显示了2个空白标签。

2 个答案:

答案 0 :(得分:0)

TabLayout.setupWithViewPager()最终将致电TabLayout.populateFromPagerAdapter()TabLayout.removeAllTabs()将致电ViewPager。之后,它将使用for (int i = 0; i < adapterCount; i++) { addTab(newTab().setText(mPagerAdapter.getPageTitle(i)), false); } 页面标题创建标签:

<TabItem>

因此,布局中的{{1}}标签会被丢弃并替换。

答案 1 :(得分:0)

作为解决方案,我决定将以下内容添加到我的主要活动中onCreate()

tabLayout.setupWithViewPager(viewPager);

tabLayout.getTabAt(0).setIcon(R.drawable.ic_mic_black_36dp);
tabLayout.getTabAt(1).setIcon(R.drawable.ic_folder_black_36dp);

最后两行将图标添加到我的空白标签中。必须在setupWithViewPager调用之后应用它们。