我有一个屏幕,屏幕的一角有一个图像,我想将其动画到屏幕的中心。类似从
Icon(
painter = //,
contentDescription = //,
modifier = Modifier.size(36.dp)
)
Run Code Online (Sandbox Code Playgroud)
到
Icon(
painter = //,
contentDescription = //,
modifier = Modifier.fillMaxSize()
)
Run Code Online (Sandbox Code Playgroud)
第一个位于屏幕左上角,第二个位于屏幕中央。如何在两种状态之间设置动画?
android kotlin android-jetpack-compose jetpack-compose-animation
在下面的代码中:
val sum = listOf(1, 2, 3).sumOf { if (it % 2 == 0) 1 else 0 }
Run Code Online (Sandbox Code Playgroud)
Kotlin 给出以下错误:
Kotlin: Overload resolution ambiguity:
public inline fun <T> Iterable<TypeVariable(T)>.sumOf(selector: (TypeVariable(T)) -> Int): Int defined in kotlin.collections
public inline fun <T> Iterable<TypeVariable(T)>.sumOf(selector: (TypeVariable(T)) -> Long): Long defined in kotlin.collections
Run Code Online (Sandbox Code Playgroud)
如果我明确使用toInt(),错误就会消失,但我会收到冗余调用的警告
Kotlin: Overload resolution ambiguity:
public inline fun <T> Iterable<TypeVariable(T)>.sumOf(selector: (TypeVariable(T)) -> Int): Int defined in kotlin.collections
public inline fun <T> Iterable<TypeVariable(T)>.sumOf(selector: (TypeVariable(T)) -> Long): Long defined in kotlin.collections …Run Code Online (Sandbox Code Playgroud) 我正在尝试在我的应用中使用 Android 新的 Paging 3 库。我正在使用返回对象列表的 Retrofit 从后端 API 获取数据。我需要询问如何在 API 返回空列表时通知 Pager 停止加载更多数据。
提前致谢...
android kotlin android-jetpack android-paging android-paging-library
在 Kotlin 和使用 Jetpack Compose 中,我有很多代码,例如:
Box(
modifier = Modifier
.fillMaxHeight()
.requiredWidth(expandedSize)
.align(Alignment.Center)
)
Run Code Online (Sandbox Code Playgroud)
但很多时候我想根据条件设置一个属性:
if(isFlag){
Box(
modifier = Modifier
.fillMaxHeight()
.requiredWidth(expandedSizeA)
.align(Alignment.Center)
)
} else {
Box(
modifier = Modifier
.fillMaxHeight()
.requiredWidth(expandedSizeB)
.align(Alignment.Center)
)
}
Run Code Online (Sandbox Code Playgroud)
或类似或requiredWidth()的条件padding()
if(isFlag){
Box(
modifier = Modifier
.fillMaxHeight()
.requiredWidth(expandedSizeA)
.align(Alignment.Center)
)
} else {
Box(
modifier = Modifier
.fillMaxHeight()
.padding(80.dp, 30.dp, 80.dp, 0.dp)
.align(Alignment.Center)
)
}
Run Code Online (Sandbox Code Playgroud)
我敢打赌有一种优雅的 Kotlin 方法可以做到这一点?
我有一个Flow<List<Int?>>,我想收集这个流,但直到我得到一个空的 Int。然后流程应该被取消。例如,
val flow = flowOf(
listOf(1, 2),
listOf(3, null),
listOf(4)
)
flow.collectUntilNull {
println(it)
}
Run Code Online (Sandbox Code Playgroud)
我想要的输出是:
[1, 2]
[3, null]
Run Code Online (Sandbox Code Playgroud)
我知道有一个函数Flow.takeWhile,但它不会发出谓词返回 false 的值。就我而言,我也想要那个。
[1, 2]
[3, null]
Run Code Online (Sandbox Code Playgroud)
由于collectWhile是内部的,我无法使用此代码。虽然我想我可以复制粘贴该collectWhile实现到我的代码中。但还有其他方法可以做到这一点吗?
我在我的项目中使用伴奏底部表目的地。设置与文档中显示的完全相同。
@Composable
fun MyApp() {
val bottomSheetNavigator = rememberBottomSheetNavigator()
val navController = rememberNavController(bottomSheetNavigator)
ModalBottomSheetLayout(bottomSheetNavigator) {
NavHost(navController, Destinations.Home) {
composable(route = "home") {
HomeScreen(
openBottomSheet = { navController.navigate("sheet") }
)
}
bottomSheet(route = "sheet") {
MyBottonSheet(
navigateToSomeRoute = { navController.navigate("some_route") }
)
}
composable(route = "some_route") {
SomeComposable(
onBackPress = { navController.navigateUp() }
)
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
MyBottomSheet这里我有一个打开屏幕的按钮SomeComposable。但是当我从那里向上导航时,我到达了HomeScreen即当我导航离开底部工作表时,底部工作表从后堆栈中弹出。如何将底部工作表保留在后堆栈中,以便当我按“后退”键时SomeComposable返回到打开状态MyBottonSheet(位于 顶部HomeScreen)的上一个状态?
android kotlin android-jetpack-navigation android-jetpack-compose jetpack-compose-accompanist