小编Has*_*ssa的帖子

Jetpack Compose 中的 Remember 和 RememberUpdatedState 之间的区别?

我很困惑,有人可以向我解释一下两者之间的区别吗:

val variable by remember { mutableStateOf() }
Run Code Online (Sandbox Code Playgroud)

val variable by rememberUpdatedState()
Run Code Online (Sandbox Code Playgroud)

当我检查源代码时,rememberUpdatedStates我实际上看到:remember { mutableStateOf() }

@Composable
fun <T> rememberUpdatedState(newValue: T): State<T> = remember {
    mutableStateOf(newValue)
}.apply { value = newValue }
Run Code Online (Sandbox Code Playgroud)

android kotlin android-jetpack-compose compose-recomposition

25
推荐指数
2
解决办法
1万
查看次数

mutableState VS mutableStateFlow?

我很困惑,有人可以向我解释一下,这两者之间的主要区别是什么?我很难理解。mutableState 是随 Jetpack Compose 引入的,现在我的问题是,我们是否应该在视图模型中使用它来替代 Mutabel 状态流?它们的目的和主要区别是什么?

android android-jetpack-compose kotlin-stateflow

24
推荐指数
2
解决办法
2万
查看次数

记住 LazyColumn 滚动位置 - Jetpack Compose

当我从一个可组合屏幕导航到另一个屏幕时,我试图保存/记住 LazyColumn 滚动位置。即使我将 RememberLazyListState 传递给 LazyColumn,在我返回到第一个可组合屏幕后,滚动位置也不会保存。有人可以帮我吗?

@ExperimentalMaterialApi
@Composable
fun DisplayTasks(
    tasks: List<Task>,
    navigateToTaskScreen: (Int) -> Unit
) {
    val listState = rememberLazyListState()

    LazyColumn(state = listState) {
        itemsIndexed(
            items = tasks,
            key = { _, task ->
                task.id
            }
        ) { _, task ->
            LazyColumnItem(
                toDoTask = task,
                navigateToTaskScreen = navigateToTaskScreen
            )
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

android kotlin android-jetpack-compose

23
推荐指数
2
解决办法
2万
查看次数

LazyColumn - Items 关键参数的用途?

有人可以解释一下LazyListScope 的 items/itemsIndexed 函数中的“key”参数的主要用途是什么吗?如果我们指定该参数,我们会得到什么或不会得到什么?我不确定我是否理解与此参数相关的官方文档:

key - 代表该项目的稳定且唯一的密钥工厂。不允许对列表中的多个项目使用相同的密钥。密钥类型应该可以通过 Android 上的 Bundle 保存。如果传递 null,则列表中的位置将代表键。当您指定键时,滚动位置将根据键保持,这意味着如果您在当前可见项目之前添加/删除项目,则具有给定键的项目将保留为第一个可见项目。

android kotlin android-jetpack-compose android-jetpack-compose-list

17
推荐指数
1
解决办法
1万
查看次数

地理编码器 - getFromLocation() 已弃用

我收到一条消息,表明此函数(或其构造函数)已被弃用。该函数有一个新的构造函数,它接受附加参数'Geocoder.GeocodeListener listener',但该新构造函数需要 API 级别 33 及以上。对于较低的API级别我应该做什么,解决方案是什么?

在此输入图像描述

android geocoding kotlin deprecation-warning android-tiramisu

11
推荐指数
3
解决办法
1万
查看次数

Android + Google 一键刷新令牌?

每当我使用Google One Tap登录 Android 应用程序时,我都会收到一个有效期约为一小时的令牌 ID 。我应该如何获得刷新令牌以避免该令牌过期时每小时登录?我查了官方文档,但没有关于刷新令牌的内容。这是否意味着每次发生这种情况时我们都需要手动登录(并获取新令牌)?

https://developers.google.com/identity/one-tap/android/overview

android google-authentication google-identity google-one-tap

8
推荐指数
0
解决办法
866
查看次数

jetpack 组合的公开下拉菜单

我想知道是否有针对 jetpack compose 的 Exposed 下拉菜单的解决方案?我无法在 jetpack compose 中为这个组件找到合适的解决方案。有什么帮助吗?

落下

android kotlin android-jetpack-compose android-compose-textfield android-jetpack-compose-text

7
推荐指数
4
解决办法
2226
查看次数

androidx.navigation.NavGraph 不能转换为 androidx.navigation.compose.ComposeNavigator$Destination

将导航组合依赖从2.4.0-alpha03更新到2.4.0-alpha05 后,我在尝试在可组合屏幕之间导航后遇到了这个奇怪的错误(例如从 taskComposable 导航到 listComposable 屏幕)。这是我的代码的一部分。

主要活动:

@AndroidEntryPoint
class MainActivity : ComponentActivity() {

    private lateinit var navController: NavHostController

    @ExperimentalAnimationApi
    @ExperimentalMaterialApi
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            MyComposeDemoTheme {
                navController = rememberNavController()
                SetupNavigation(
                    navController = navController
                )
            }
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

设置导航:

@ExperimentalAnimationApi
@ExperimentalMaterialApi
@Composable
fun SetupNavigation(
    navController: NavHostController
) {
    val screen = remember(navController) { Screens(navController) }

    NavHost(
        navController = navController,
        startDestination = "list/{action}"
    ) {
        listComposable(
            navigateToTaskScreen = screen.task
        )
        taskComposable(
            navigateToListScreen = …
Run Code Online (Sandbox Code Playgroud)

android kotlin android-jetpack-compose

6
推荐指数
1
解决办法
282
查看次数

本地存储加载有线圈的图像?

因此,我使用 Coil 图像加载库通过指定图像 URL 从 API 加载图像。但是,当没有互联网连接时,我希望能够在我的应用程序中看到这些图像。Coil 库中是否支持此类内容,或者我们应该自己将这些图像存储在本地?

如果是这样,我们是否应该使用 Coil 将该图像 URL 转换为位图,然后将其保存在本地?

更新:

顺便说一句,我正在使用带有 Jetpack Compose 的库。

 val painter = rememberImagePainter("$BASE_URL${item.image}") {
        memoryCachePolicy(policy = CachePolicy.ENABLED)
    }
Run Code Online (Sandbox Code Playgroud)

android offline-caching kotlin

6
推荐指数
1
解决办法
1万
查看次数

将图像拖动到框的边界 - Jetpack Compose

我正在尝试在 Jetpack Compose 中创建可缩放图像。我已启用放大/缩小功能,但我不确定应该如何设置TranslationX属性的限制,以便我无法将图像水平移动到框边界之外?有什么解决办法吗?

在此输入图像描述

例子:

@Composable
fun ZoomableImage(
    painter: Painter
) {
    val scale = remember { mutableStateOf(1f) }
    var offsetX by remember { mutableStateOf(0f) }
    Box(
        modifier = Modifier
            .fillMaxSize()
            .background(MaterialTheme.colors.welcomeScreenBackgroundColor)
            .pointerInput(Unit) {
                detectTransformGestures { centroid, pan, zoom, rotation ->
                    scale.value *= zoom
                }
            },
        contentAlignment = Alignment.Center
    ) {
        Image(
            modifier = Modifier
                .pointerInput(Unit) {
                    detectHorizontalDragGestures { change, dragAmount ->
                        offsetX += dragAmount
                    }
                }
                .graphicsLayer(
                    translationX = offsetX,
                    scaleX = maxOf(1f, minOf(3f, scale.value)), …
Run Code Online (Sandbox Code Playgroud)

android kotlin android-jetpack-compose

6
推荐指数
1
解决办法
2752
查看次数