2016-07-24 7 views
3

私はこのように、外側の活動を終了し、XMLでイベントリスナーを定義したいと思います:Androidデータバインディング - レイアウトXMLの囲みアクティビティにアクセスできますか?

<EditText 
    android:id="@+id/finish" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:imeOptions="actionDone" 
    android:inputType="text" 
    android:onEditorAction="@{() -> activity.finish()}" /> 

しかし、私が囲んでいる活動への参照を持っていません。私は<variable>を使って渡すことができますが、Activityはあまりにも一般的な変数で、すべてのレイアウトで明示的に渡されるようです...私はコードを単純化するためにデータバインディングが導入されたと思いました。 ViewDataBindingクラスでヒントが見つかりませんでした。

答えて

2

コンテキストにアクセスできますが、アクティビティには自動的にキャストされません。インフレーション・コンテキストがアクティビティであり、それを自動的に変数として取り出すことができるのは意味があります。 android.comに機能リクエストを追加することができます。

平均時間では、私はそれが少し長いですけど、あなたがいる限り、インフレの状況が活動であるとして、これを行うことができます。

<EditText 
    android:id="@+id/finish" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:imeOptions="actionDone" 
    android:inputType="text" 
    android:onEditorAction="@{() -> ((Activity)context).finish()}" /> 
+0

私はちょうどそれをしようとしましたが、括弧が誤解されています(アクティビティ)(getRoot()。getContext())。finish();パーサーによって変換されます。 "error:not a statement"でコンパイルに失敗します。 – Avi

+0

実際には、この種のキャストは他の変数に対しても機能します。組み込みの「コンテキスト」のみがこの問題を引き起こします。 – Avi

関連する問題