You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何简化CollapsingToolbarLayout动态设置不同标题的冗余代码

代码优化方案

核心优化思路

你原有代码的主要冗余点在于:

  • 重复4次查找同一个CollapsingToolbarLayout控件,4个变量实际指向同一个实例
  • switch的每个分支逻辑完全一致,仅标题资源ID不同,存在大量重复代码

优化后代码

版本1:用资源ID映射实现(最稳妥,不会因为资源重命名出问题)

// 仅初始化一次CollapsingToolbarLayout
CollapsingToolbarLayout collapsingToolbar = findViewById(R.id.collapsing_tollbar);
// 统一设置一次样式,不需要每次切换都重复赋值
collapsingToolbar.setExpandedTitleTextAppearance(R.style.expanded_appbarr);
collapsingToolbar.setCollapsedTitleTextAppearance(R.style.collapseAppBar);

// 建立分类ID和标题资源的映射
SparseIntArray titleResMap = new SparseIntArray();
titleResMap.put(1, R.string.category_title_1);
titleResMap.put(2, R.string.category_title_2);
titleResMap.put(3, R.string.category_title_3);
titleResMap.put(4, R.string.category_title_4);

// 拼接标题
String title = getString(titleResMap.get(categoryid)) + " " + getString(R.string.in_city_name);
collapsingToolbar.setTitle(title);

版本2:动态获取资源ID(更简洁,适合分类ID连续的场景)

CollapsingToolbarLayout collapsingToolbar = findViewById(R.id.collapsing_tollbar);
collapsingToolbar.setExpandedTitleTextAppearance(R.style.expanded_appbarr);
collapsingToolbar.setCollapsedTitleTextAppearance(R.style.collapseAppBar);

// 动态匹配对应的分类标题资源ID
int titleResId = getResources().getIdentifier("category_title_" + categoryid, "string", getPackageName());
String title = getString(titleResId) + " " + getString(R.string.in_city_name);
collapsingToolbar.setTitle(title);

额外适配ViewPager的优化建议

如果是和ViewPager配合使用,可以直接把标题逻辑放到ViewPager.OnPageChangeListener的onPageSelected回调里,点击列表项切换ViewPager页面的时候自动更新标题,不需要单独在点击事件里处理标题逻辑,进一步解耦。

内容的提问来源于stack exchange,提问作者tankian vei

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 14:36:07