gpt4 book ai didi

android - 如何使用jetpack撰写导航将位图从屏幕传递到另一个屏幕

转载 作者:行者123 更新时间:2023-12-05 00:01:52 32 4
gpt4 key购买 nike

我正在使用喷气背包撰写。我有两个屏幕,我想将一个位图从第一个屏幕发送到第二个屏幕。所以我将我的位图转换为字符串并将其作为参数传递:


composable(
route = "${NavGraph.FilterScreen.route}/{screenShot}",
arguments = listOf(navArgument("screenShot") {
this.type = NavType.StringType
})
) {
FilterScreen(
innerPadding = padding,
navController = navController,
screenShot = it.arguments?.getString("screenShot")
)
}
我从第一个屏幕导航到第二个屏幕,如下所示:
 navController.navigate(NavGraph.FilterScreen.route + "/${bitmapToString(it)}")
问题是:
好像是因为Bitmap的字符串版本太长,导航处理不了,报如下错误:
cannot be found in the navigation graph NavGraph(0x0) startDestination={Destination(0x78d845ec) route=home}
我这么说是因为当我用包含位图值的字符串替换一个小的随机字符串时,一切正常。
我也尝试使用 parcellable。但是我得到 parcellable 不能有默认值的错误,所以我们必须作为字符串传递。
我该如何解决这个问题?

最佳答案

您可以将图像保存在第一个屏幕上的临时文件中,然后在第二个屏幕上读取该图像,之后,您可以删除该文件。
我在 Github 上做了一个示例项目,它可能不是最好的代码,但你明白了
第一个屏幕:

 val context = LocalContext.current
val path = context.getExternalFilesDir(null)!!.absolutePath

val image = YOUR_BITMAP_IMAGE

val tempFile = File(path , "tempFileName.jpg")
val fOut = FileOutputStream(tempFile)
image.compress(Bitmap.CompressFormat.JPEG , 100 , fOut)
fOut.close()

goToNextScreen()
第二屏:
val context = LocalContext.current

val path = context.getExternalFilesDir(null)!!.absolutePath
val imagePath = "$path/tempFileName.jpg"

val image = BitmapFactory.decodeFile(imagePath)
File(imagePath).deleteOnExit() // Delete temp image
它可能不是最好的解决方案,但它会完成这项工作。

关于android - 如何使用jetpack撰写导航将位图从屏幕传递到另一个屏幕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72153057/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com