Dav*_*ave 39 data-binding android android-databinding
尝试为int创建一个@BindingConversion时遇到一个神秘的问题.
以下代码适用于浮点数到字符串:
XML:
...
<variable
name="myViewModel"
type="... .SomeModel" />
...
<TextView
style="@style/StyleStuff"
android:text="@{myViewModel.number}" />
Run Code Online (Sandbox Code Playgroud)
码:
public class SomeModel {
public ObservableFloat number = new ObservableFloat();
}
Run Code Online (Sandbox Code Playgroud)
和设置:
viewModel.number.set(3.14f);
Run Code Online (Sandbox Code Playgroud)
但是,如果我尝试对字符串进行同样的操作,我会崩溃.
public ObservableInt number = new ObservableInt();
Run Code Online (Sandbox Code Playgroud)
同
viewModel.number.set(42);
Run Code Online (Sandbox Code Playgroud)
我得到以下内容:
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)
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?谢谢!
Com*_*are 120
android:text
与int
假定int
是一个字符串资源ID.使用android:text="@{Integer.toString(myViewModel.number)}"
.
您还需要导入Integer
该类:
__PRE__
Mar*_*jad 15
在文本视图中将int转换为字符串,如下所示:
android:text="@{String.valueOf(myViewModel.number)}"
Run Code Online (Sandbox Code Playgroud)
此外,String
必须通过布局导入类:
<layout>
<data>
<import type="java.lang.String" />
</data>
…
</layout>
Run Code Online (Sandbox Code Playgroud)
Wes*_*ely 15
当心,在最新的DataBinding
(2019),它不要求进口Integer
也String
或者你会得到这样的错误:
****/ data binding error ****msg:Missing import expression although it is registered file
Run Code Online (Sandbox Code Playgroud)
官方文件说:java.lang.* is imported automatically.
随便走
android:text="@{Integer.toString(myViewModel.number)}"
要么
android:text="@{String.valueOf(myViewModel.number)}"
直。
Khe*_*raj 10
android:text="@{`` + model.intValue}"
Run Code Online (Sandbox Code Playgroud)
这可以用在双向绑定为EditText
也。用户输入的位置设置为模型中的Integer值,并显示为String
。
android:text="@={`` + model.intValue}"
Run Code Online (Sandbox Code Playgroud)
另请参阅此答案。
为时已晚,但我为新手更新它。您可以使用以下方法解析 xml 中的 int:
Integer.parseInt(string)
Run Code Online (Sandbox Code Playgroud)
或字符串:
String.valueOf(string)
Run Code Online (Sandbox Code Playgroud)
这对我有用
<TextView
android:id="@+id/number"
android:text='@={Converter.convertIntToString(myViewModel.number)}'
/>
Run Code Online (Sandbox Code Playgroud)
具有逆方法的转换器类
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);
}}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
18741 次 |
最近记录: |