web-dev-qa-db-ja.com

Android intから文字列へのデータバインディング@BindingConversionの失敗

Intから文字列への@BindingConversionを作成しようとすると、謎の問題が発生します。
次のコード文字列への浮動小数点数に対応

xml:

...
<variable
        name="myViewModel"
        type="... .SomeModel" />
...
<TextView
            style="@style/StyleStuff"
            Android:text="@{myViewModel.number}" />

コード:

public class SomeModel {
    public ObservableFloat number = new ObservableFloat();
}

および設定:

viewModel.number.set(3.14f);

しかし、ints to stringsに対して同じことをしようとすると、クラッシュします。

 public ObservableInt number = new ObservableInt();

viewModel.number.set(42);

私は次を取得します:

FATAL EXCEPTION: main
Process: ...myapplication, PID: 14311
Android.content.res.Resources$NotFoundException: String resource ID #0xfa0
    at Android.content.res.Resources.getText(Resources.Java:1123)
    at Android.support.v7.widget.ResourcesWrapper.getText(ResourcesWrapper.Java:52)
    at Android.widget.TextView.setText(TextView.Java:4816)
    at ...executeBindings(ActivityAdaptersBinding.Java:336)
    at Android.databinding.ViewDataBinding.executePendingBindings(ViewDataBinding.Java:355)

何か案は?ありがとう!

36
Dave

int付きの_Android:text_は、intが文字列リソースIDであると想定します。 Android:text="@{Integer.toString(myViewModel.number)}"を使用します。

Integerクラスもインポートする必要があります。 (不要になりました)

110
CommonsWare

以下のように、TextViewで設定するためにintを文字列に変換します。

Android:text="@{String.valueOf(myViewModel.number)}"

また、レイアウトによってStringクラスをインポートする必要があります。

<layout>
   <data>
      <import type="Java.lang.String" />
   </data>

   …

</layout>
14
Marjan Dn

注意してください、最新のDataBinding(2019)では、[〜#〜] not [ 〜#〜]IntegerまたはStringのインポートが必要です。そうしないと、このエラーが発生します。

_****/ data binding error ****msg:Missing import expression although it is registered file
_

公式ドキュメント 言う:_Java.lang.* is imported automatically._

ただ行く

Android:text="@{Integer.toString(myViewModel.number)}"または

Android:text="@{String.valueOf(myViewModel.number)}"

直接。

14
Wesely

最も簡単な解決策は、誰かを助けることかもしれません。

Android:text="@{`` + model.intValue}"

これは、EditTextの-​​ 双方向バインディング でも使用できます。ユーザー入力は、モデルでInteger値として設定され、Stringとして表示されます。

Android:text="@={`` + model.intValue}"

this answer も参照してください。

8
Khemraj

これは私のために働いた

  <TextView
        Android:id="@+id/number"
        Android:text='@={Converter.convertIntToString(myViewModel.number)}'

        />

逆メソッドを使用したコンバータークラス

public class Converter {


public static int convertStringToInt(String text) {
   return Integer.parseInt(text);
}

@InverseMethod(value="convertStringToInt")
public static String convertIntToString(int value) {
    return Integer.toString(value);
}}
1
shahana kareen