Próbuję zrozumieć, jak poprawnie przekazać opcje od strony js reakcji-native do strony Java.w jaki sposób interfejs ReadableMap w React-native konwertuje JS na JAVA?
Natywny mostek używa ReadableMap do konwersji, ale jako Java noob nie rozumiem, jak to działa.
Dokładniej nie rozumiem:
- w jaki sposób rzeczywiste prace konwersji?
- jak określić typ/format wymagany przez kod Java podrzędny?
- jak prawidłowo użyć ReadableMap, aby to zrobić?
Generalnie chciałbym wiedzieć, jak to działa, ale podam konkretny przykład, na który patrzę, aby podać kontekst.
Natywny pakiet reaguje na próbnik datetime.
JS strona posiada metodę 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
jest zmostkowany z Java method na rodzimej strony:
@ReactMethod
public void showTimePicker(ReadableMap options, Callback callback) {
DialogFragment timePicker = new TimePicker(options, callback);
timePicker.show(activity.getFragmentManager(), "timePicker");
}
który wzywa
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);
}
który tworzy i wystąpienie Androida TimePicker. Moim celem jest zmiana stylu Timepicker z zegarka na spinner.
Istnieje możliwy do ustawienia atrybut XML android:timePickerMode="spinner"
, ale myślę, że nie mogę przekazać atrybutu XML poprzez reakcję natywną, czy mogę?
Znalazłem również sugestię w komentarzach do przekazania defStyleAttr, aby to zrobić, ale nie rozumiem w jaki sposób.
okrzyki, dzięki za dogłębną odpowiedź – funkyeah