Javascript React native中的ReadableMap接口如何将JS转换为JAVA?
我试图理解如何正确地将选项从react native的js端传递到java端 react本机网桥用于转换,但作为JavaNoob,我无法理解这是如何工作的 更具体地说,我不明白:Javascript React native中的ReadableMap接口如何将JS转换为JAVA?,javascript,java,android,react-native,Javascript,Java,Android,React Native,我试图理解如何正确地将选项从react native的js端传递到java端 react本机网桥用于转换,但作为JavaNoob,我无法理解这是如何工作的 更具体地说,我不明白: 实际转换是如何工作的 如何判断下游Java代码需要什么类型/格式 如何正确使用ReadableMap来实现这一点 一般来说,我想知道这是如何工作的,但我将给出我正在查看的具体示例,以提供一些上下文 react本机包公开日期时间选择器 JS端有一个showTimePicker方法: showTimePicker(d
- 实际转换是如何工作的
- 如何判断下游Java代码需要什么类型/格式
- 如何正确使用ReadableMap来实现这一点
react本机包公开日期时间选择器 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);
});
}
RCTDateTimePicker.showTimePicker
在本机端桥接到Java:
@ReactMethod
public void showTimePicker(ReadableMap options, Callback callback) {
DialogFragment timePicker = new TimePicker(options, callback);
timePicker.show(activity.getFragmentManager(), "timePicker");
}
哪个叫
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);
}
它创建了一个Android实例。我的目标是将计时器选择器的样式从手表更改为旋转器
有一个可设置的XML属性android:timePickerMode=“spinner”
,但我认为我不能通过react native传递XML属性,可以吗
我在评论中也找到了一个建议,可以传递给大家,但我不明白怎么做。首先,请参阅Android本机模块的React本机文档中的列表
参数类型
方法支持以下参数类型
使用@ReactMethod进行注释,并直接映射到JavaScript
等价物
- 布尔->布尔
- 整数->数字
- 双->数字
- 浮动->数字
- 字符串->字符串
- 回调->函数
- ReadableMap->Object
- ReadableArray->Array
选项,将timePickerMode
的额外字段作为字符串传递
var options = {
...this.props,
hour:date.getHours(),
minute:date.getMinutes(),
timePickerMode:"spinner"
};
然后从自定义时间选择器中的ReadableMap中获取该值
String timePickerMode = options.hasKey("timePickerMode") ?
options.getString("timePickerMode") : defaultTimePickerMode;
现在您有了要设置的值。不幸的是,timePickerMode
似乎不能通过编程进行设置。询问如何做,@alanv(其个人资料表明他们是谷歌的软件工程师)表示在运行时不可能这样做