gpt4 book ai didi

android - 如何编写通用 BindingAdapter 来设置 OnLongClickListener?

转载 作者:行者123 更新时间:2023-12-02 13:36:01 25 4
gpt4 key购买 nike

在我的 Android 项目中,我使用以下 BindingAdapter连接OnLongClickListener到 View 及其对应的 View 模型。

@JvmStatic
@BindingAdapter(value = ["onLongClick", "onLongClickText"], requireAll = true)
fun setOnLongClickListener(view: View, viewModel: MyViewModel, text: CharSequence) {
view.setOnLongClickListener {
viewModel.onButton1LongClick(text)
true
}
}

...在 XML 布局中:
app:onLongClick="@{viewModel}"
app:onLongClickText="@{otherView.text}"

这是同一 View 模型类中的第二个适配器:
@JvmStatic
@BindingAdapter("onLongClick")
fun setOnLongClickListener(view: View, viewModel: MyViewModel) {
view.setOnLongClickListener {
viewModel.onButton2LongClick()
true
}
}

...在 XML 布局中:
app:onLongClick="@{viewModel}"

我很想制作 BindingAdapter 可重复使用 所以它可以连接到不同的 View 。我想我可以从 XML 传递实际的方法引用。这是我的 不工作草案:
@JvmStatic
@BindingAdapter(value = ["onLongClick", "onLongClickText"], requireAll = true)
fun setOnLongClickListener(view: View, onLongClick: (CharSequence) -> Unit, text: CharSequence) {
view.setOnLongClickListener {
onLongClick.invoke(text)
true
}
}

...在 XML 布局中:
app:onLongClick="@{(view) -> viewModel.onButton1LongClick(???)}"
app:onLongClickText="@{otherView.text}"

最佳答案

查看型号:

class MyViewModel : ViewModel() {

private val TAG = "MyViewModel"

fun onButton1LongClick(text: CharSequence) : Unit {
Log.d(TAG, "onButton1LongClick: " + text)
}
val f1 : (CharSequence) -> Unit = {text -> onButton1LongClick(text)}

fun onButton2LongClick() {
Log.d(TAG, "onButton2LongClick")
}
val f2 : () -> Unit = {onButton2LongClick()}
}

绑定(bind)适配器:
@JvmStatic
@BindingAdapter(value = ["onLongClick", "onLongClickText"], requireAll = true)
fun setOnLongClickListener(view: View, onLongClick: (CharSequence) -> Unit, text: String?) {
view.setOnLongClickListener {
onLongClick.invoke(text?:"")
true
}
}

@JvmStatic
@BindingAdapter("onLongClick")
fun setOnLongClickListener(view: View, onLongClick: () -> Unit) {
view.setOnLongClickListener {
onLongClick.invoke()
true
}
}

XML 布局:

<EditText
android:id="@+id/edit_text"
android:layout_width="match_parent"
android:layout_height="wrap_content" />

<Button
onLongClick="@{viewModel.f1}"
onLongClickText='@{editText.text.toString()}'
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Button 1" />

<Button
onLongClick="@{viewModel.f2}"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Button 2" />

关于android - 如何编写通用 BindingAdapter 来设置 OnLongClickListener?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57181348/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com