我想在顶栏中向我的应用添加字符串资源,但当我调用它时,出现了一个数字,并且由于它是一个密封类,因此不允许我实现stringResource或getString。第一个
我没有直接输入字符串,因为在浏览窗口时顶栏会更改名称,我希望它是个性化的。这是一段通过窗口改变标题的代码,如果它能工作,但是它得到了窗口路径的名称,我看到的唯一解决方案是给路径分配一个字符串资源来定制它。
zkure5ic1#
您可以从backStackEntry捕获返回值,并使用它通过when检查Destination的route参数,然后让它返回显式String
when
String
var title by remember { mutableStateOf("") } LaunchedEffect(Unit){ navController.currentBackStackEntryFlow.collect { title = it.destination.route.let { route -> when (route) { Destinations.Translate.route -> { "Translate" } Destinations.Words.route -> { "Words" } Destinations.Numbers.route -> { "Numbers" } else -> { "" // empty or your default title bar } } } } } TopAppBar( title = { Text(text = title) } )
也可以向Destination密封类添加一个附加参数
Destination
sealed class Destinations( @StringRes val stringRes: Int, val route: String, val title: String, val icon: ImageVector ) { object Translate: Destinations(R.string.translate_title, ...) object Words: Destinations(R.string.words_title, ...) object Numbers: Destinations(R.string.numbers_title, ...) }
在LaunchEffect调用中
... val context = LocalContext.current LaunchedEffect(Unit){ navController.currentBackStackEntryFlow.collect { title = context.getString(it.destination.route.let { route -> when (route) { Destinations.Translate.route -> { Destinations.Translate.stringRes } Destinations.Words.route -> { Destinations.Words.stringRes } Destinations.Numbers.route -> { Destinations.Numbers.stringRes } else -> { // empty or your default/initial title Destinations.Translate.stringRes } } }) } } ...
1条答案
按热度按时间zkure5ic1#
您可以从backStackEntry捕获返回值,并使用它通过
when
检查Destination的route参数,然后让它返回显式String
也可以向
Destination
密封类添加一个附加参数在LaunchEffect调用中