如何简化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
相关产品推荐
相关产品推荐

