android - Android BindingAdapter 将可变数量的参数(vararg)作为参数
问题描述
我有两个 int 变量(myRank、totalRanks)来显示我的应用程序中的当前排名,例如:
排名:2/10
因为我的字符串模板很复杂(仍然是%d/%d但采用HTML 格式,带有字体大小、字体颜色),而不是
<androidx.appcompat.widget.AppCompatTextView
android:text="@{@string/text_current_rank(myRank, totalRanks)}"
/>
我必须创建一个自定义 BindingAdapter:
@BindingAdapter("android:htmlText")
fun setHtmlText(view: TextView, text: String) {
view.text = HtmlCompat.fromHtml(text, HtmlCompat.FROM_HTML_MODE_LEGACY)
}
xml 布局绑定看起来更好:
<androidx.appcompat.widget.AppCompatTextView
android:htmlText="@{@string/text_current_rank(myRank, totalRanks)}"
/>
它正常工作。但是,我想创建一个更具体的 BindingAdapter,例如:
@BindingAdapter("android:textRank")
fun setTextRank(view: TextView, vararg args: Int) {
view.text = HtmlCompat.fromHtml(
view.context.getString(R.string.text_current_rank, args),
HtmlCompat.FROM_HTML_MODE_LEGACY)
}
接着:
<androidx.appcompat.widget.AppCompatTextView
android:textRank="@{ ??? }" // pass myRank, totalRanks as arguments
/>
是的,问题是关于将 vararg 作为 BindingAdapter 参数。这(以及如何)可能吗?注意:我不想使用类包装器(RankDetail 包含 myRank、totalRanks)或两个 BindingAdapter 参数,例如:
@BindingAdapter("android:myRank", "android:totalRanks")
fun setTextRank(view: TextView, myRank: Int, totalRanks: Int) {
view.text = HtmlCompat.fromHtml(
view.context.getString(R.string.text_current_rank, myRank, totalRanks),
HtmlCompat.FROM_HTML_MODE_LEGACY)
}
解决方案
推荐阅读
- sonarqube - SonarQube 在覆盖范围内包含测试类
- sql - 如何在 SELECT 中替换空白和 NULL
- angular - 如何在 ngx-agora 的角度模块中动态设置 AppID 键
- firefox - 如何强制 Firefox 按需重置其 DNS 缓存?
- c# - 在活动开始前一天发送提醒电子邮件
- ionic-framework - 在 Ionic 4 或 5 中使用 WebIntent 从其他应用程序接收数据
- python - Apache Kafka(v2.4.0) - Python 中的 Spark (v2.4.4) 流式集成
- python - Python Selenium - 自动填写表格 - 单击不是提交按钮的按钮并从列表中填写表格
- c - 将输入元素编辑到函数
- c++ - 由于运行时错误,无法从二维向量获取输出