Android Jetpack Compose:管理共享UI状态
我的第一个问题是,这样做是否正确Android Jetpack Compose:管理共享UI状态,android,android-jetpack-compose,Android,Android Jetpack Compose,我的第一个问题是,这样做是否正确 对于第二个问题,我觉得我在上一个屏幕中设置的值应该由当前屏幕负责。所以我试着这样做 Screen.B->{ //就在这里------------------- 活跃的{ title=“屏幕B” 动作={ 图标按钮(onClick={}){ 图标(资产=Icons.Sharp.Home) } } } //就在这里------------------- 我的屏幕( name=“B”, buttonName=“到屏幕C”, onNext={ currentScr
Screen.B->{
//就在这里-------------------
活跃的{
title=“屏幕B”
动作={
图标按钮(onClick={}){
图标(资产=Icons.Sharp.Home)
}
}
}
//就在这里-------------------
我的屏幕(
name=“B”,
buttonName=“到屏幕C”,
onNext={
currentScreen=Screen.C
}
)
}
我想这个问题可以通过使用Jetpack导航来解决
也许这篇文章能帮你
欢迎链接到某个解决方案,但请确保您的答案在没有它的情况下是有用的:这样您的其他用户就会知道它是什么以及它为什么在那里,然后引用您链接到的页面最相关的部分,以防目标页面不可用。
typealias Actions = @Composable () -> Unit
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
SampleAppTheme {
var currentScreen by remember { mutableStateOf(Screen.A) }
var title by remember { mutableStateOf("Screen A") }
var action by remember { mutableStateOf<Actions>({}) }
Scaffold(
topBar = {
TopAppBar(
title = {
Text(title)
},
actions = {
action()
}
)
}
) {
Crossfade(current = currentScreen) { screen ->
when (screen) {
Screen.A -> {
MyScreen(
name = "A",
buttonName = "to Screen B",
onNext = {
currentScreen = Screen.B
title = "Screen B"
action = {
IconButton(onClick = {}) {
Icon(asset = Icons.Sharp.Home)
}
}
}
)
}
Screen.B -> {
MyScreen(
name = "B",
buttonName = "to Screen C",
onNext = {
currentScreen = Screen.C
title = "Screen B"
action = {
IconButton(onClick = {}) {
Icon(asset = Icons.Sharp.Close)
}
}
}
)
}
Screen.C -> {
MyScreen(
name = "C",
buttonName = "to Screen A",
onNext = {
currentScreen = Screen.A
title = "Screen A"
action = {}
}
)
}
}
}
}
}
}
}
}
enum class Screen {
A, B, C
}
@Composable
fun MyScreen(
name: String,
buttonName: String,
onNext: () -> Unit,
) {
Column(
Modifier.fillMaxSize().padding(24.dp),
) {
Text(
modifier = Modifier.weight(1f),
text = "I am in screen $name!",
textAlign = TextAlign.Center,
style = MaterialTheme.typography.h3
)
Button(
modifier = Modifier.fillMaxWidth(),
onClick = onNext
) {
Text(text = buttonName)
}
}
}
MyScreen(
name = "B",
buttonName = "to Screen C",
onNext = {
currentScreen = Screen.C
title = "Screen B"
// This right here!!!! -------------------
action = {
IconButton(onClick = {}) {
Icon(asset = Icons.Sharp.Close)
}
}
// This right here!!!! -------------------
}
)