小编Abh*_*bhi的帖子

如何让xml中的`onClick()`调用两个方法?

我想onClick()在布局 xml 中触发两个视图模型的两种方法。

代码:

<Button
    android:onClick="@{() -> model.onButtonClick()}"
    ... />
Run Code Online (Sandbox Code Playgroud)

上面的代码调用一个方法,我希望它从不同的视图模型调用另一个方法。
我想添加的函数调用:model2.onButtonClick()

是否可以?如果是,请添加一个最小的例子。(期待 xml 解决方案

注意:视图模型作为 xml 中的参数传递。(数据绑定变量)

编辑 1:两个函数都位于两个不同的视图模型中。所以我(经过一些研究)知道在另一个视图模型中使用/声明/初始化一个视图模型并不是一个好的做法。

我可以在我的片段中创建一个点击侦听器并在那里调用这两个函数。但我想消除片段中的点击侦听器(按照 MVVM 进行视图)。

我并不是在寻找某种可能的方法。我正在寻找一种最佳实践方法,打算在其中实现 MVVM、关注点分离和数据绑定。

android onclick buttonclick android-databinding

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

KMM 是否适用于 Android Studio - Windows 版本

我需要为 iOS 和 Android 构建一个应用程序。
重新启动 Android Studio 后出现此错误。

Kotlin Multiplatform Mobile 插件问题
Kotlin Multiplatform Mobile 插件应该只适用于 macOS

我正在使用 Windows 机器。
请告诉我,如果有任何解决此问题的方法。

windows android-studio kotlin-multiplatform kmm

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

Jetpack compose 中的 AppCompatActivity 而不是 ComponentActivity

我想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吗?
或者有没有其他方法,如果上述解决方案不正确,我可以得到解决方案?

android appcompatactivity android-jetpack-compose

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

如何在 Jetpack Compose Text 中使文本居中(水平和垂直)

我有一个大的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.
正在寻找类似的解决方案。

注意
寻找不使用其他组件包装文本的解决方案。(BoxColumn, ETC)。

我知道我的要求可以使用包装器组件来实现,如此处所示

android android-jetpack-compose

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

Android Jetpack Compose 导航中的依赖性问题

我正在探索文档中指定的撰写导航。

添加文档中指定的版本的依赖项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 compileSdkVersiontargetSdkVersion

升级版本出现这个错误,

错误2

清单合并失败:针对 Android 12 及更高版本的应用需要android: exported在相应组件定义了意图过滤器时指定显式值。有关详细信息,请参阅https://developer.android.com/guide/topics/manifest/activity-element#exported 。

为了解决这个问题,检查了这篇文章

即使添加后android:exported,我也收到相同的错误(错误2)。

compileSdkVersion升级到31是强制的吗?

如果是,如何解决错误2。如果否,如何解决错误1?

如果可能的话,我个人更喜欢坚持使用 SDK 30。

android android-jetpack-compose jetpack-compose-navigation

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

如何在 Jetpack Compose 中创建垂直无限轮播?

我正在尝试构建一个可滚动列(最好是 LazyColumn),它将在滚动到末尾后再次开始重新显示第一个项目。例如,看看这个闹钟,它将从 00..59 开始循环,然后再次从 0 开始平滑滚动。

我尝试过一个普通的 LazyColumn,它会显示 58,59,00..59,00,01,并在完成滚动(达到 59)后快速启动,但它看起来“便宜”。

android android-jetpack-compose

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

如何在 Jetpack Compose 中显示表情符号?

无法使用 Jetpack Compose 正确显示表情符号。

代码

    Text(
        text = data.emoji.character,
        textAlign = TextAlign.Center,
        fontSize = 28.sp,
    )
Run Code Online (Sandbox Code Playgroud) Jetpack 撰写文本

使用 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

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

Kotlin Map 项目列表流程

我有一个事务存储库,我可以从中获取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)

有什么办法可以改变mapmap减少这段代码吗?

android kotlin kotlin-flow

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

我可以使用 State&lt;ArrayList&lt;T&gt;&gt; 或 State&lt;mutableListOf()&gt; 来让 Compose 观察到它们发生变化时触发重组吗?

以下内容摘自文章

1:我不完全明白我是否可以使用State<ArrayList<T>>State<mutableListOf()>由 Compose 观察以在它们发生变化时触发重组?

2:我很奇怪为什么State<List<T>>和 immutablelistOf()可以通过 Compose 观察到它们发生变化时触发重组,但实际上List<T>和 immutablelistOf()是不可变的,你能给我一些示例代码吗?

注意:在 Compose 中使用可变对象(例如 ArrayList 或 mutableListOf())作为状态将导致用户在应用程序中看到不正确或过时的数据。

不可观察的可变对象(例如 ArrayList 或可变数据类)无法被 Compose 观察到,从而在它们发生更改时触发重组。

我们建议您使用可观察的数据持有者,例如 State<List> 和不可变的 listOf(),而不是使用不可观察的可变对象。

图像 在此输入图像描述

kotlin android-jetpack-compose

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

在jetpack中撰写如何在图标附近添加数字(计数)(例如,评论)

在此输入图像描述 如何在 android jetapck compose 中的图标附近添加数字,我已在下面附加了这样的快照。请帮助我解决问题。

icons android placeholder android-jetpack-compose

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