2017-10-11 15 views
1

私はonLongClickのリスナーを作成する必要があるテキストビューを持っています。 それぞれのviewmodelには、onClickのロジックを扱うsendLogs()関数があります。 onClickをonLongClick関数に変更すると、決して呼び出しを受けません。 onLongClickで動作させる方法はありますか?Androidデータバインディング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

@BurhanuddinRashidレイアウトの結合部分を追加しました。これはすべてこの問題に関連しています。 –

+0

それを試してみるのは難しいことは何もありませんでした。以下の私の答えを見てください。 –

答えて

4

私はそれを正しく動作させることができました。私はこれが適切に文書化されているのか疑問です。プレゼンターのviewmodelクラスのXML

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

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

注:このメソッドのシグネチャは、まさにこの形式でなければなりません。それ以外の場合、実行時にbidingエラーがスローされます。それが機能するために

+0

メソッドシグネチャのリターンパラメータは "boolean" – Jovin

1

あなたはこのdocument

OnLongClickになっているはずですが、あなたのSystemSettingsViewModelあなたが

public boolean onLongClick(){} 

とxmlに持つことができ以内

のonClick

のと同じくらい簡単です

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

はい、そうです。私はその文書を読んで、早く試しました。しかし、結果はありません。コンパイラがアンドロイドでコンパイルに失敗しました:onLongClick() –

0

、括弧内の部分はこのように見えるインタフェースView.OnLongClickListenerからメソッドのシグネチャと一致する必要があります:

boolean onLongClick(View view); 

これは、私はそれが動作するようになった方法です:

<View 
... 
android:onLongClick="@{(view) -> listener.onLongClick(view, viewmodel)}"/> 
... 
関連する問題