【问题标题】:Android - No tab titles in TabLayout?Android - TabLayout 中没有标签标题?
【发布时间】:2020-11-10 07:55:50
【问题描述】:

我创建了一个带有 viewpager 和 3 个片段的 tablayout。当我运行应用程序时,我可以正确看到所有内容,除了未显示的选项卡标题,我错过了什么?

我在 mainactivity.oncreate 中的代码:

tabLayout=findViewById(R.id.tab_layout);
        viewPager= findViewById((R.id.view_pager));
        final ViewPagerAdapter viewPagerAdapter= new ViewPagerAdapter(getSupportFragmentManager());
        viewPagerAdapter.addFragment(RulesFragment.getInstance(), "TREE RULES");
        viewPagerAdapter.addFragment(TreeFragment.getInstance(), "REGRESSION TREE");
        viewPagerAdapter.addFragment(PredictionFragment.getInstance(), "PREDICTION");
        rulesFragment= (RulesFragment) viewPagerAdapter.getItem(0);
        treeFragment= (TreeFragment) viewPagerAdapter.getItem(1);
        predictionFragment= (PredictionFragment) viewPagerAdapter.getItem(2);
        viewPager.setAdapter(viewPagerAdapter);
        tabLayout.setupWithViewPager(viewPager);
        viewPager.setOffscreenPageLimit(3);

.xml 文件:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">


    <androidx.viewpager.widget.ViewPager
        android:id="@+id/view_pager"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <com.google.android.material.tabs.TabLayout
            android:id="@+id/tab_layout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:tabIndicatorAnimationDuration="1000"
            app:tabIndicatorColor="@android:color/holo_blue_dark"
            app:tabIndicatorGravity="top"
            app:tabSelectedTextColor="@android:color/holo_purple"
            app:tabTextColor="@android:color/white"
            app:tabBackground="@android:color/holo_orange_light">
        </com.google.android.material.tabs.TabLayout>
    </androidx.viewpager.widget.ViewPager>
</RelativeLayout>

我得到了什么:

在 .xml 中,我只添加了 viewpager 和 tablayout,我没有为选项卡标题添加任何 textview 或其他内容,因为我认为它会使用 tabLayout.setupWithViewPager(viewPager) 自动完成。错了吗?

【问题讨论】:

  • 共享 xml 文件。
  • 添加了@bilal

标签: android tabs android-viewpager


【解决方案1】:

在 ViewPagerAdapter 中实现 getPageTitle!

喜欢-

 // Returns the page title for the top indicator
        @Override
        public CharSequence getPageTitle(int position) {
            return "Page " + position;
        }

参考你可以检查 -

https://guides.codepath.com/android/viewpager-with-fragmentpageradapter

此外,您的 ViewPagerAdapter 不应保留List&lt;Fragment&gt;,因为这会在生产过程中进程死亡后导致崩溃。实现 FragmentPagerAdapter 的正确方法是:

public class ViewPagerAdapter extends FragmentPagerAdapter {
    public ViewPagerAdapter(FragmentManager fragmentManager) {
        super(fragmentManager);
    }

    @Override
    public Fragment getItem(int position) {
        if(position == 0) return new RulesFragment();
        if(position == 1) return new TreeFragment();
        if(position == 2) return new PredictionFragment();

        throw new IllegalStateException("Unexpected position " + position);
    }

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

    @Override
    public CharSequence getPageTitle(int position) {
        if(position == 0) return "TREE RULES";
        if(position == 1) return "REGRESSION TREE";
        if(position == 2) return "PREDICTION";
      
        throw new IllegalStateException("Unexpected position " + position);
    }
}

要获得对由 ViewPager 创建的 Fragment 的引用,请使用以下 findFragmentByTag 方案:

Fragment fragment = supportFragmentManager.findFragmentByTag("android:switcher:" + viewPager.getId() + ":" + fragmentPosition)

【讨论】:

  • 非常感谢!我已经覆盖了它,但我返回了空字符串,因为我必须编辑它但我忘记了:D
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多