尝试将int的@BindingConversion设为字符串时出现了一个神秘的问题 以下代码适用于浮点数到字符串:
的xml:
func initilizeFetchedResultsController() {
let moc = DatabaseController.sharedInstance.managedObjectContext
let fetchRequest = NSFetchRequest()
let entity = NSEntityDescription.entityForName("Coctail", inManagedObjectContext: moc)
fetchRequest.entity = entity
fetchRequest.fetchLimit = 10
fetchRequest.sortDescriptors = [NSSortDescriptor(key: "name", ascending: true)]
let aFetchedResultsController = NSFetchedResultsController(fetchRequest: fetchRequest,
managedObjectContext: moc,
sectionNameKeyPath: nil,
cacheName: nil)
aFetchedResultsController.delegate = self
do {
try aFetchedResultsController.performFetch()
} catch {
fatalError("\(error)")
}
fetchedResultsController = aFetchedResultsController
}
代码:
Authorization
并设置:
...
<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();
有什么想法吗? 谢谢!
答案 0 :(得分:97)
android:text
的 int
假定int
是字符串资源ID。使用android:text="@{Integer.toString(myViewModel.number)}"
。
您还需要导入Integer
类:
<layout>
<data>
<import type="java.lang.Integer" />
</data>
<!-- rest of layout goes here -->
</layout>
答案 1 :(得分:11)
将int转换为字符串,以便在TextView中设置,如下所示:
android:text="@{String.valueOf(myViewModel.number)}"
此外,必须通过布局导入String
类:
<layout>
<data>
<import type="java.lang.String" />
</data>
…
</layout>
答案 2 :(得分:5)
当心,此问题的所选答案已过期。
最新DataBinding
,它不需要不需要导入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)}"
直接。
答案 3 :(得分:4)
android:text="@{`` + model.intValue}"
这也可以在two-way binding中用于EditText
。用户输入的位置在模型中设置为整数值,并显示为String
。
android:text="@={`` + model.intValue}"
另请参见this answer。
答案 4 :(得分:0)
这对我有用
<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);
}}
答案 5 :(得分:0)
为时已晚,但我为新手更新了它。 您可以使用以下方法解析为 xml 中的 int:
Integer.parseInt(string)
或字符串:
String.valueOf(string)