如何使用数据绑定在同一视图上添加一个点击和一个长点击监听器?

问题描述 投票:0回答:1

我有这个布局文件。

<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">

    <data class="ItemDataBinding">
        <variable
            name="item"
            type="com.example.data.Item" />

        <variable
            name="onItemClickListener"
            type="com.example.OnItemClickListener" />

        <variable
            name="onLongShoppingListClickListener"
            type="com.example.OnLongItemClickListener" />
    </data>

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="@{(v) -> onItemClickListener.onItemClick(item)}">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/item_text_view"
            android:text="@{item.getName()}"/>
    </RelativeLayout>
</layout>

有了一个单次点击的监听器,它就能正常工作。我试过了。

android:onClick="@{(v) -> onItemClickListener.onItemClick(item), onLongItemClickListener.onLongItemClick(item)}">

但是没有用 如何在同一视图上添加两个监听器?

android data-binding onclicklistener android-databinding onlongclicklistener
1个回答
1
投票

你必须创建自己的 ClickHander 并用于 XML 像下面这样。

    <data>

         <variable
                name="item"
                type="com.example.data.Item" />

        <variable
            name="handler"
            type="embitel.com.databindingexample.helper.ClickHander" />

    </data>

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onLongClick="@{(v) -> handler.onLongClickOnHeading(v, item)}"
        android:onClick="@{(v)->handler.onItemClicked(v,item)}">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/item_text_view"
            android:text="@{item.getName()}"/>
    </RelativeLayout>

您的 ClickHandler 阶层

    public class ClickHander {

    public void onItemClicked(View v, Item item) {
        Context context = v.getContext();
        // Your code 
    }

    // For long click
    public void onLongClickOnHeading(View v, Item item) {
        Context context = v.getContext();
        // Your code 
    }
}

在您的网站上设置Binding ActivityFragment

binding.setHandler(new ClickHander());
© www.soinside.com 2019 - 2024. All rights reserved.