Android~为什么FragmentPagerAdapter会清除我的Layouts TabItem图标?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android~为什么FragmentPagerAdapter会清除我的Layouts TabItem图标?相关的知识,希望对你有一定的参考价值。

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

<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个空白标签。

答案

TabLayout.setupWithViewPager()最终会打电话给TabLayout.populateFromPagerAdapter(),后者将调用TabLayout.removeAllTabs()。之后,它将使用ViewPager的页面标题创建新标签:

for (int i = 0; i < adapterCount; i++) {
    addTab(newTab().setText(mPagerAdapter.getPageTitle(i)), false);
}

因此,布局中的<TabItem>标签被简单地丢弃并替换。

另一答案

作为一个解决方案,我决定将以下内容添加到我的主要活动的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调用之后应用它们。

以上是关于Android~为什么FragmentPagerAdapter会清除我的Layouts TabItem图标?的主要内容,如果未能解决你的问题,请参考以下文章

android代表啥品牌手机

android4.0.4是啥意思?

Android SO啥意思

什么是android开发 知乎

[Android Pro] Android开发实践:为什么要继承onMeasure()

为什么要用Android Studio?