我想onClick()在布局 xml 中触发两个视图模型的两种方法。
代码:
<Button
android:onClick="@{() -> model.onButtonClick()}"
... />
Run Code Online (Sandbox Code Playgroud)
上面的代码调用一个方法,我希望它从不同的视图模型调用另一个方法。
我想添加的函数调用:model2.onButtonClick()
是否可以?如果是,请添加一个最小的例子。(期待 xml 解决方案)
注意:视图模型作为 xml 中的参数传递。(数据绑定变量)
编辑 1:两个函数都位于两个不同的视图模型中。所以我(经过一些研究)知道在另一个视图模型中使用/声明/初始化一个视图模型并不是一个好的做法。
我可以在我的片段中创建一个点击侦听器并在那里调用这两个函数。但我想消除片段中的点击侦听器(按照 MVVM 进行视图)。
我并不是在寻找某种可能的方法。我正在寻找一种最佳实践方法,打算在其中实现 MVVM、关注点分离和数据绑定。
我需要为 iOS 和 Android 构建一个应用程序。
重新启动 Android Studio 后出现此错误。
Kotlin Multiplatform Mobile 插件问题
Kotlin Multiplatform Mobile 插件应该只适用于 macOS
我正在使用 Windows 机器。
请告诉我,如果有任何解决此问题的方法。
我想datePicker在 Jetpack compose 中单击按钮打开对话框。
为此,我在按钮的onClick操作中使用以下代码。
val context = LocalContext.current
Button(onClick = {
(context as AppCompatActivity).let {
val picker = MaterialDatePicker.Builder.datePicker().build()
picker.show(it.supportFragmentManager, picker.toString())
picker.addOnPositiveButtonClickListener {
// some code
}
}
})
Run Code Online (Sandbox Code Playgroud)
如果我使用的是ComponentActivity,supportFragmentManager则不受支持。
可以从 扩展活动AppCompatActivity吗?
或者有没有其他方法,如果上述解决方案不正确,我可以得到解决方案?
我有一个大的Text。
Text(
text = "Select Bank account",
color = Color.White,
fontSize = 18.sp,
textAlign = TextAlign.Center,
modifier = Modifier
.background(Color.Black)
.fillMaxSize()
.padding(16.dp)
.align(Alignment.CenterHorizontally)
)
Run Code Online (Sandbox Code Playgroud)
如何使文本垂直和水平居中?
在基于视图的系统中,我们可以使用Gravity.CENTER.
正在寻找类似的解决方案。
注意
寻找不使用其他组件包装文本的解决方案。(Box,Column, ETC)。
我知道我的要求可以使用包装器组件来实现,如此处所示。
我正在探索文档中指定的撰写导航。
添加文档中指定的版本的依赖项2.4.0-alpha07会出现以下错误,
错误1
检查 AAR 元数据值时发现的一个或多个问题:
依赖项的 AAR 元数据 (META-INF/com/android/build/gradle/aar-metadata.properties) 中指定的 minCompileSdk (31) 大于此模块的compileSdkVersion (android-30)。依赖项:androidx.navigation:navigation-compose:2.4.0-alpha07。AAR 元数据文件:/Users/abhimanyu/.gradle/caches/transforms-3/0575ff5712e0a9c15b8d7424501c07b8/transformed/jetified-navigation-compose-2.4.0-alpha07/META-INF/com/android/build/gradle/aar-metadata。特性。
这个错误迫使我将我的应用程序从 30 升级到 31 compileSdkVersion。targetSdkVersion
升级版本出现这个错误,
错误2
清单合并失败:针对 Android 12 及更高版本的应用需要
android: exported在相应组件定义了意图过滤器时指定显式值。有关详细信息,请参阅https://developer.android.com/guide/topics/manifest/activity-element#exported 。
为了解决这个问题,检查了这篇文章。
即使添加后android:exported,我也收到相同的错误(错误2)。
compileSdkVersion升级到31是强制的吗?
如果是,如何解决错误2。如果否,如何解决错误1?
如果可能的话,我个人更喜欢坚持使用 SDK 30。
我正在尝试构建一个可滚动列(最好是 LazyColumn),它将在滚动到末尾后再次开始重新显示第一个项目。例如,看看这个闹钟,它将从 00..59 开始循环,然后再次从 0 开始平滑滚动。
我尝试过一个普通的 LazyColumn,它会显示 58,59,00..59,00,01,并在完成滚动(达到 59)后快速启动,但它看起来“便宜”。
无法使用 Jetpack Compose 正确显示表情符号。
代码
Text(
text = data.emoji.character,
textAlign = TextAlign.Center,
fontSize = 28.sp,
)
Run Code Online (Sandbox Code Playgroud)
使用 Compose 时Text,我面临兼容性问题。
豆腐和多个表情符号按此处的说明出现。
为了解决这个问题,我尝试使用AppCompatTextViewin AndroidView。
代码
AndroidView(
factory = { context ->
AppCompatTextView(context).apply {
text = data.emoji.character
textSize = 28F
textAlignment = View.TEXT_ALIGNMENT_CENTER
}
},
)
Run Code Online (Sandbox Code Playgroud)
它显示表情符号没有任何兼容性问题,但表情符号淡出。
android emoji android-jetpack-compose android-jetpack-compose-text
我有一个事务存储库,我可以从中获取Flow<List<Transaction>>.
基于这些数据,我需要创建一个Flow<List<Source?>>.
可以传递给 which 的hastransaction返回一个源(如果存在),否则返回。sourceIdsourceRepository.getSource()null
视图模型代码
var transactions: Flow<List<Transaction>> = transactionRepository.transactions
var sourceList: Flow<List<Source?>> = flow {
transactions.map {
it.map { transaction ->
if (transaction.sourceId != null) {
sourceRepository.getSource(transaction.sourceId)
} else {
null
}
}
}.collect {
emit(it)
}
}
Run Code Online (Sandbox Code Playgroud)
有什么办法可以改变map并map减少这段代码吗?
以下内容摘自文章。
1:我不完全明白我是否可以使用State<ArrayList<T>>或State<mutableListOf()>由 Compose 观察以在它们发生变化时触发重组?
2:我很奇怪为什么State<List<T>>和 immutablelistOf()可以通过 Compose 观察到它们发生变化时触发重组,但实际上List<T>和 immutablelistOf()是不可变的,你能给我一些示例代码吗?
注意:在 Compose 中使用可变对象(例如 ArrayList 或 mutableListOf())作为状态将导致用户在应用程序中看到不正确或过时的数据。
不可观察的可变对象(例如 ArrayList 或可变数据类)无法被 Compose 观察到,从而在它们发生更改时触发重组。
我们建议您使用可观察的数据持有者,例如 State<List> 和不可变的 listOf(),而不是使用不可观察的可变对象。
android ×8
kotlin ×2
android-jetpack-compose-text ×1
buttonclick ×1
emoji ×1
icons ×1
kmm ×1
kotlin-flow ×1
onclick ×1
placeholder ×1
windows ×1