fun*_*eah 10 javascript java android react-native
我试图了解如何正确地将选项从react-native的js端传递到java端.
react-native桥使用ReadableMap进行转换,但作为Java noob,我无法理解其工作原理.
更具体地说,我不明白:
一般来说,我想知道这是如何工作的,但我会给出一个具体的例子,我正在考虑给出一些背景信息.
react-native软件包公开了一个日期时间选择器.
JS方面有一个showTimePicker方法:
showTimePicker(date, callback) {
date = date || new Date();
console.log(this.props);
debugger
var options = {
...this.props,
hour:date.getHours(),
minute:date.getMinutes()
};
RCTDateTimePicker.showTimePicker(options, function (hour, minute) {
date.setHours(hour);
date.setMinutes(minute);
callback(date);
});
}
Run Code Online (Sandbox Code Playgroud)
RCTDateTimePicker.showTimePicker在本机端桥接到Java 方法:
@ReactMethod
public void showTimePicker(ReadableMap options, Callback callback) {
DialogFragment timePicker = new TimePicker(options, callback);
timePicker.show(activity.getFragmentManager(), "timePicker");
}
Run Code Online (Sandbox Code Playgroud)
哪个叫
public TimePicker(ReadableMap options, Callback callback) {
final Calendar c = Calendar.getInstance();
this.callback = callback;
hour = options.hasKey("hour") ? options.getInt("hour") : c.get(Calendar.HOUR_OF_DAY);
minute = options.hasKey("minute") ? options.getInt("minute") : c.get(Calendar.MINUTE);
}
Run Code Online (Sandbox Code Playgroud)
它创建了Android TimePicker的实例.我的目标是将Timepicker的样式从watch更改为spinner.
有一个可设置的XML属性android:timePickerMode="spinner"但我不认为我可以通过react-native传递XML属性吗?
我还在评论中发现了一个传递defStyleAttr来执行此操作的建议,但我不明白如何做.
mpk*_*uth 11
首先,请参阅Android Native Modules的React Native文档中的Argument Types列表.
参数类型
使用@ReactMethod注释的方法支持以下参数类型,它们直接映射到它们的JavaScript等价物
- 布尔 - >布尔
- 整数 - >数字
- 双 - >数字
- 浮动 - >数量
- String - > String
- 回调 - >功能
- ReadableMap - > Object
- ReadableArray - > Array
因此,您可以通过timePickerMode更新optionsJS端传递以包含它来传递额外字段作为String .
var options = {
...this.props,
hour:date.getHours(),
minute:date.getMinutes(),
timePickerMode:"spinner"
};
Run Code Online (Sandbox Code Playgroud)
然后从自定义TimePicker构造函数中的ReadableMap获取该值.
String timePickerMode = options.hasKey("timePickerMode") ?
options.getString("timePickerMode") : defaultTimePickerMode;
Run Code Online (Sandbox Code Playgroud)
现在您拥有了您想要设置的值.不幸的是,似乎没有timePickerMode可以通过编程方式设置.这个SO问题询问如何做到这一点和@alanv(其简介表明他们是Google的软件工程师)表明它在运行时是不可能的.
| 归档时间: |
|
| 查看次数: |
4651 次 |
| 最近记录: |