我很困惑,有人可以向我解释一下两者之间的区别吗:
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
我很困惑,有人可以向我解释一下,这两者之间的主要区别是什么?我很难理解。mutableState 是随 Jetpack Compose 引入的,现在我的问题是,我们是否应该在视图模型中使用它来替代 Mutabel 状态流?它们的目的和主要区别是什么?
当我从一个可组合屏幕导航到另一个屏幕时,我试图保存/记住 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) 有人可以解释一下LazyListScope 的 items/itemsIndexed 函数中的“key”参数的主要用途是什么吗?如果我们指定该参数,我们会得到什么或不会得到什么?我不确定我是否理解与此参数相关的官方文档:
key - 代表该项目的稳定且唯一的密钥工厂。不允许对列表中的多个项目使用相同的密钥。密钥类型应该可以通过 Android 上的 Bundle 保存。如果传递 null,则列表中的位置将代表键。当您指定键时,滚动位置将根据键保持,这意味着如果您在当前可见项目之前添加/删除项目,则具有给定键的项目将保留为第一个可见项目。
android kotlin android-jetpack-compose android-jetpack-compose-list
我收到一条消息,表明此函数(或其构造函数)已被弃用。该函数有一个新的构造函数,它接受附加参数'Geocoder.GeocodeListener listener',但该新构造函数需要 API 级别 33 及以上。对于较低的API级别我应该做什么,解决方案是什么?
android geocoding kotlin deprecation-warning android-tiramisu
每当我使用Google One Tap登录 Android 应用程序时,我都会收到一个有效期约为一小时的令牌 ID 。我应该如何获得刷新令牌以避免该令牌过期时每小时登录?我查了官方文档,但没有关于刷新令牌的内容。这是否意味着每次发生这种情况时我们都需要手动登录(并获取新令牌)?
https://developers.google.com/identity/one-tap/android/overview
android google-authentication google-identity google-one-tap
android kotlin android-jetpack-compose android-compose-textfield android-jetpack-compose-text
将导航组合依赖从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) 因此,我使用 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) 我正在尝试在 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 ×10
kotlin ×8
android-jetpack-compose-list ×1
android-jetpack-compose-text ×1
geocoding ×1