小编Max*_*tin的帖子

为什么当我返回时 LaunchedEffect 会第二次调用?

我想显示一些数据并模拟加载。因此,我在第一个屏幕上使用 LaunchedEffect。它工作正常,但是当我添加导航时, LaunchedEffect 启动两次。

导航:第一个 (LaunchedEffect) -> 第二个 -> 返回第一个(LaunchedEffect 再次启动)

我希望当我返回第一个屏幕时 LaunchedEffect 将不会启动,我将立即看到数据。

启动效果示例:

@Composable
fun FirstScreen(...) {
    ...
    LaunchedEffect(Unit) {
        state = State.Loading
        delay(2_000L)
        state = State.Success(...)
    }
}
Run Code Online (Sandbox Code Playgroud)

导航示例:

val navController = rememberNavController()
NavHost(
    navController = navController,
    startDestination = FIRST_ROTE
) {
    composable(FIRST_ROTE) { FirstScreen(...) }
    composable(SECOND_ROTE) { SecondScreen(...) }
}
Run Code Online (Sandbox Code Playgroud)

android android-jetpack-compose

16
推荐指数
1
解决办法
3835
查看次数

如何在 Compose 中创建包含合并单元格的网格视图?

我需要实现下一个网格:

在此输入图像描述

红色框的大小应取决于屏幕宽度。我尝试使用列和行:

@Composable
fun Component() {
    Column(modifier = Modifier.fillMaxWidth()) {
        Row {
            repeat(5) {
                if (it > 0) {
                    Spacer(modifier = Modifier.width(20.dp))
                }
                Box(modifier = Modifier
                    .aspectRatio(1f)
                    .weight(1f).background(Color.Red))
            }
        }
        Spacer(modifier = Modifier.height(20.dp))
        Row {
            repeat(4) {
                if (it > 0) {
                    Spacer(modifier = Modifier.width(20.dp))
                }
                val weight = if (it < 3) 1f else 2f
                Box(modifier = Modifier
                    .aspectRatio(weight)
                    .weight(weight).background(Color.Red))
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但由于第二排少了一个空间,所以看起来并不完美。

在此输入图像描述

如何使用合并单元格创建像素完美的网格视图?我了解 LazyGrid,但我不确定它是否合适,因为我的网格需要全屏。

android gridview android-jetpack-compose

5
推荐指数
1
解决办法
408
查看次数

线圈图像缓存

我使用 Coil 库将图像加载到 Android 应用程序中。如果没有互联网,它会立即向我显示缓存的图像。但是当有互联网连接时,线圈会再次加载图像,并且有一段时间我会看到占位符。我认为这是一个非常奇怪的逻辑。即使有互联网连接,如何让它立即显示缓存的图像?

我当前的代码:

fun ImageView.setPhoto(photoLink: String) {
    load(photoLink) {
        crossfade(true)
        placeholder(R.drawable.placeholder)
        error(R.drawable.placeholder)
        size(ViewSizeResolver(this@setPhoto))
    }
}
Run Code Online (Sandbox Code Playgroud)

android image-caching coil

4
推荐指数
1
解决办法
3768
查看次数

如何优化 JetPack Compose 列表性能?

我有一个简单的可组合函数,其中包含 LazyColumn:

@Composable
fun MyScreen(itemList: List<Item>) {
    LazyColumn {
        intems(itemList) {
            ...
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

一切都很好,但是itemList当滚动到达某个位置索引时,我的 ViewState( ) 应该改变。这就是为什么我将以下行添加到可组合函数中:

@Composable
fun MyScreen(itemList: List<Item>) {
    val lazyListState = rememberLazyListState()
    viewModel.onPositionChanged(lazyListState.firstVisibleItemIndex)
    LazyColumn(state = lazyListState) {
        intems(itemList) {
            ...
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

一切都按我的预期进行,但性能明显下降。我该如何修复它?

android android-jetpack android-jetpack-compose

4
推荐指数
1
解决办法
2514
查看次数

为什么我收到“预期字段或方法名称错误”

预期的字段或方法名称位于 ... -keepclassmembers class * { *** @null(android.view.View); }

android proguard build-error

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