2017-10-11 71 views
1

我有一个文本视图,我需要为onLongClick创建一个监听器。 现在对于相应的viewmodel,它有一个函数sendLogs(),它处理onClick的逻辑。如果我将onClick更改为onLongClick函数,则永远不会接到呼叫。有没有办法让onLongClick工作?Android Databinding onLongClick不工作

onClick直接链接到我的模型类函数,但不是onLongClick。所以我认为模型类绑定是正确的,但我可能需要一些额外的工作。

<data> 
    <import type="android.view.View" /> 

    <variable 
     type="com.aaa.bbb.viewmodel.SystemSettingsViewModel" 
     name="systemSettings" 
    </variable> 
</data> 

<TextView 
    android:gravity="end" 
    android:id="@+id/tv_logging" 
    android:layout_centerVertical="true" 
    android:layout_height="wrap_content" 
    android:layout_marginRight="8dp" 
    android:layout_width="wrap_content" 
    android:onClick="@{() -> systemSettings.sendLogs()}" 
    android:text="@string/enable_logs" 
    android:textAlignment="viewEnd" /> 
+0

发布您的完整xml代码 –

+0

@BurhanuddinRashidI添加了布局的绑定部分。这都与这个问题有关。 –

+0

有没有什么困难,你应该尝试过,见下面我的答案。 –

回答

4

我设法正确地工作。我怀疑这是正确记录。

在XML

android:onLongClick="@{(view) -> presenter.onLongClickOnHeading(view)}" 

演示者视图模型类

public boolean onLongClickOnHeading(View v) { 
    //logic goes here 
    return false; 
} 

注:此方法的签名应该是完全以这种格式。否则,在运行时抛出错误。

+0

方法签名的返回参数必须为“boolean” – Jovin

1

你应该看看这个document

OnLongClick是的onClick

容易在你的SystemSettingsViewModel你可以有

public boolean onLongClick(){} 

和XML

android:onLongClick="@{() -> presenter.onLongClick()}" 
+0

是的,应该是。我阅读了这个文档,并且试用了。但没有结果。编译器无法使用android进行编译:onLongClick() –

0

对于它的工作,括号中的部分必须匹配从接口View.OnLongClickListener看起来像这样的方法签名:

boolean onLongClick(View view); 

所以这是我得到它的工作:

<View 
... 
android:onLongClick="@{(view) -> listener.onLongClick(view, viewmodel)}"/> 
...