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)
何か案は?ありがとう!
int
付きの_Android:text
_は、int
が文字列リソースIDであると想定します。 Android:text="@{Integer.toString(myViewModel.number)}"
を使用します。
(不要になりました)Integer
クラスもインポートする必要があります。
以下のように、TextViewで設定するためにintを文字列に変換します。
Android:text="@{String.valueOf(myViewModel.number)}"
また、レイアウトによってString
クラスをインポートする必要があります。
<layout>
<data>
<import type="Java.lang.String" />
</data>
…
</layout>
注意してください、最新の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)}"
直接。
Android:text="@{`` + model.intValue}"
これは、EditText
の- 双方向バインディング でも使用できます。ユーザー入力は、モデルでInteger値として設定され、String
として表示されます。
Android:text="@={`` + model.intValue}"
this answer も参照してください。
これは私のために働いた
<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);
}}