Android int 到 string 的数据绑定 @BindingConversion 失败
Android Data Binding @BindingConversion failure for int to string
运行 在尝试将 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);
但是,如果我对 整数到字符串 尝试同样的操作,我会崩溃。
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)
有什么想法吗?
谢谢!
android:text
和 int
假定 int
是字符串资源 ID。使用 android:text="@{Integer.toString(myViewModel.number)}"
.
您还需要导入 Integer
class:(不再需要)
将 int 转换为字符串以在 TextView 中设置,如下所示:
android:text="@{String.valueOf(myViewModel.number)}"
此外,String
class 必须由布局导入:
<layout>
<data>
<import type="java.lang.String" />
</data>
…
</layout>
最简单的解决方案,可能会对某人有所帮助。
android:text="@{`` + model.intValue}"
这也可以在 two-way binding 中用于 EditText
。其中用户输入在模型中设置为Integer值,显示为String
.
android:text="@={`` + model.intValue}"
另见 。
这对我有用
<TextView
android:id="@+id/number"
android:text='@={Converter.convertIntToString(myViewModel.number)}'
/>
转换器 class 使用逆向方法
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);
}}
当心,在最新的 DataBinding
(2019) 中,它 NOT 需要导入 Integer
或 String
否则你会得到这个错误:
****/ data binding error ****msg:Missing import expression although it is registered file
official doc 说:java.lang.* is imported automatically.
随便走
android:text="@{Integer.toString(myViewModel.number)}"
或者
android:text="@{String.valueOf(myViewModel.number)}"
直接。
为时已晚,但我为新手更新了它。
您可以使用以下方法在 xml 中解析为 int:
Integer.parseInt(string)
或通过以下方式转换为字符串:
String.valueOf(string)
运行 在尝试将 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);
但是,如果我对 整数到字符串 尝试同样的操作,我会崩溃。
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)
有什么想法吗? 谢谢!
android:text
和 int
假定 int
是字符串资源 ID。使用 android:text="@{Integer.toString(myViewModel.number)}"
.
您还需要导入 (不再需要)Integer
class:
将 int 转换为字符串以在 TextView 中设置,如下所示:
android:text="@{String.valueOf(myViewModel.number)}"
此外,String
class 必须由布局导入:
<layout>
<data>
<import type="java.lang.String" />
</data>
…
</layout>
最简单的解决方案,可能会对某人有所帮助。
android:text="@{`` + model.intValue}"
这也可以在 two-way binding 中用于 EditText
。其中用户输入在模型中设置为Integer值,显示为String
.
android:text="@={`` + model.intValue}"
另见
这对我有用
<TextView
android:id="@+id/number"
android:text='@={Converter.convertIntToString(myViewModel.number)}'
/>
转换器 class 使用逆向方法
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);
}}
当心,在最新的 DataBinding
(2019) 中,它 NOT 需要导入 Integer
或 String
否则你会得到这个错误:
****/ data binding error ****msg:Missing import expression although it is registered file
official doc 说:java.lang.* is imported automatically.
随便走
android:text="@{Integer.toString(myViewModel.number)}"
或者
android:text="@{String.valueOf(myViewModel.number)}"
直接。
为时已晚,但我为新手更新了它。 您可以使用以下方法在 xml 中解析为 int:
Integer.parseInt(string)
或通过以下方式转换为字符串:
String.valueOf(string)