8

Android Studio 2.1 AFIK で導入されたデータ バインディング API の双方向バインディングで遊んでいます。

次の興味深いエラーが表示されます。

エラー: タスク ':app:compileDebugJavaWithJavac' の実行に失敗しました。
> java.lang.RuntimeException: データ バインディング エラーが見つかりました。
****/ データ バインディング エラー ****msg: 式 address.street を反転できません: 双方向バインディングでは、java.lang.String プロパティ 'street'
ファイルのセッターを解決できません:/path/to/layout .xml
loc:34:37 - 34:50 ****\ データ バインディング エラー ****

そのエラーをググってみたら、4日前の日本語のTwitter投稿を見つけて、それについて泣いている人が...

<EditText
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:hint="@string/edit_hint_zip"
    android:text="@={address.zip}"
    tools:text="12345"/>

それaddress.zipStringです。CharSequenceここでの問題はvs.Stringの戻り値であると推測していますEditText.getText()

私の考えはそれを定義することでしたが、これは私にはうまくいきません:

@NonNull
@InverseBindingAdapter(attribute = "text")
public static String getText(EditText edit) {
    return edit.getText().toString();
}

私は何を取りこぼしたか?

4

3 に答える 3

9

このバグは非常に醜く、正しくはデータ バインディング API のバグです。解決策は、セッターゲッターを生成することです。セッターを作成するというアイデアはすぐに思いつきましたが、ゲッターは作成しませんでした。

これが私の単純化されたモデルです。

public class Address {
    public String street;

    public void setStreet(String street) {
        this.street = street;
    }

    public String getStreet() {
        return street;
    }
}

お気づきかもしれませんが、ゲッターとセッターは役に立ちませんが、双方向バインディングには必要です。

これが API のバグだと思われる場合は、私のバグ レポートにスターを付けてください:双方向バインディングが必要なセッターとゲッター

于 2016-04-30T20:54:58.747 に答える
0

databinding 公式リポジトリhttps://android.googlesource.com/platform/frameworks/data-binding/ commit メッセージによると、このバグは Android Studio 2.2 preview 3 で修正されています。

于 2016-06-16T09:04:01.577 に答える