如何解决Toolbar需切换标签后才更新标题?默认启动显示Home标题
解决Toolbar默认标题未自动显示的问题
我懂你这个困扰——启动应用时默认Tab的Toolbar标题没加载出来,非得切换一次Tab才生效,对吧?这是因为初始化阶段我们没主动触发标题设置的逻辑,下面给你几个实用的解决办法:
方法一:初始化完成后手动设置默认标题
在MainActivity的onCreate方法里,等ViewPager、TabLayout都配置好之后,直接调用setTitle把默认标题设为"Home":
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 初始化Toolbar、TabLayout、ViewPager的常规代码 mToolbar = findViewById(R.id.toolbar); setSupportActionBar(mToolbar); tabLayout = findViewById(R.id.tab_layout); viewPage = findViewById(R.id.view_pager); MyPagerAdapter adapter = new MyPagerAdapter(getSupportFragmentManager()); viewPage.setAdapter(adapter); tabLayout.setupWithViewPager(viewPage); // 关键步骤:手动给Toolbar设置默认标题 setTitle("Home"); }
方法二:通过ViewPager监听触发初始标题
如果你的标题是和每个Fragment绑定的,可以在设置ViewPager.OnPageChangeListener后,主动调用一次默认页面的标题设置逻辑:
// 先给ViewPager设置页面切换监听 viewPage.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {} @Override public void onPageSelected(int position) { // 根据当前页面位置获取对应标题(假设适配器里存了标题列表) String currentTitle = adapter.getPageTitle(position).toString(); setTitle(currentTitle); } @Override public void onPageScrollStateChanged(int state) {} }); // 初始化完成后,主动触发一次默认页面(索引0)的标题设置 setTitle(adapter.getPageTitle(0).toString());
方法三:利用PagerAdapter的标题方法提前设置
如果你的PagerAdapter已经重写了getPageTitle方法,那可以直接在适配器初始化后,获取第一个页面的标题设置给Toolbar:
先看PagerAdapter的代码示例:
public class MyPagerAdapter extends FragmentPagerAdapter { private final List<Fragment> fragmentList = new ArrayList<>(); private final List<String> titleList = new ArrayList<>(); public MyPagerAdapter(FragmentManager manager) { super(manager); // 添加首页Fragment和对应标题 fragmentList.add(new HomeFragment()); titleList.add("Home"); // 其他页面的Fragment和标题... } @Override public CharSequence getPageTitle(int position) { return titleList.get(position); } // 重写getItem、getCount等方法... }
然后在MainActivity的onCreate里:
MyPagerAdapter adapter = new MyPagerAdapter(getSupportFragmentManager()); viewPage.setAdapter(adapter); tabLayout.setupWithViewPager(viewPage); // 直接从适配器拿首页标题设置Toolbar setTitle(adapter.getPageTitle(0));
这样启动应用时,Toolbar就会直接显示Home标题,不用再切换Tab啦。
内容的提问来源于stack exchange,提问作者Joy Dey
相关产品推荐
相关产品推荐

