android 吐司未显示在编写活动上

myzjeezk  于 2023-01-24  发布在  Android
关注(0)|答案(2)|浏览(133)

对于有Jetpack编写经验的人来说,这可能是个愚蠢的问题,但由于某种原因,我的吐司没有显示。下面是它的代码片段。我在onCreate方法的不同部分发送了3个带有.show()的Toast,但仍然没有任何React。我还尝试使用LocalContext.current作为@Composable函数内的上下文,但结果相同,什么都没有显示。我在网上看到许多不同的例子,甚至在YouTube上的视频中也应该运行这个完全相同的可以。有人知道为什么吗?

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    Toast.makeText(this, " ASDASDASD ", Toast.LENGTH_LONG).show()
    setContent {
        Toast.makeText(this, " ASDASDASD ", Toast.LENGTH_LONG).show()
        MyApplicationTheme {
            // A surface container using the 'background' color from the theme
            Surface(
                modifier = Modifier.fillMaxSize(),
                color = MaterialTheme.colors.background
            ) {
                Toast.makeText(this, " ASDASDASD ", Toast.LENGTH_LONG).show()
                Greeting("Android")
            }
        }
    }
}
wfveoks0

wfveoks01#

显示Toast的示例代码。

setContent {
    val context = LocalContext.current
    MyAppTheme {
        Box(
            contentAlignment = Alignment.Center,
            modifier = Modifier.fillMaxSize(),
        ) {
            TextButton(
                onClick = {
                    Toast.makeText(context, "Toast", Toast.LENGTH_LONG).show()
                },
            ) {
                Text(text = "Show Toast")
            }
        }
    }
}

让我来分解一下这段代码中要研究的重要内容。

  1. Toast不应该是可组合代码的一部分,而应该是副作用代码的一部分。
    (e.g. onClick()LaunchedEffectDisposableEffect等)
    1.使用LocalContext.current获取可组合代码中的上下文。注意,必须将其存储在变量中,因为onClick()中的代码没有可组合作用域。(如上所述)
    1.可组合对象的重新组合非常频繁,这取决于UI的变化,我们不希望每次可组合对象重新组合时都显示Toast
    请参阅Side Effects Docs以更好地理解它。
9bfwbjaz

9bfwbjaz2#

您需要使用scaffold来显示toast

    • 代码:**
class SimpleFormActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            val scaffoldState = rememberScaffoldState()
            var inputFieldState by remember { mutableStateOf("") }
            val scope = rememberCoroutineScope()

            Scaffold(
                modifier = Modifier.fillMaxSize(),
                scaffoldState = scaffoldState
            ) { padding ->
                Column(
                    Modifier
                        .fillMaxSize()
                        .padding(50.dp),
                    horizontalAlignment = Alignment.CenterHorizontally,
                    verticalArrangement = Arrangement.Center
                ) {
                    TextField(
                        value = inputFieldState,
                        label = {
                            Text(text = "Enter your name")
                        },
                        onValueChange = {
                            inputFieldState = it
                        },
                        singleLine = true,
                        modifier = Modifier.fillMaxWidth()
                    )
                    Spacer(modifier = Modifier.height(20.dp))
                    Button(
                        onClick = {
                            scope.launch {
                                scaffoldState.snackbarHostState.showSnackbar(
                                    inputFieldState,
                                    duration = SnackbarDuration.Short
                                )
                            }
                        }) {
                        Text(text = "Click")
                    }
                }
            }
        }
    }
}
    • 演示:**

相关问题