我想在Android上的React Native应用程序中使用OpenStreetMap磁贴,所以我正在尝试包装OSMDroid本机UI组件,如此处所述.在大多数情况下它的正常工作,但我无法搞清楚如何正确地处理事件,尤其是onScroll和onZoom.
使用OSMDroid,您可以设置DelayedMapListener来处理事件,这非常简单.我已经确认事件正在Java端正确处理,直到触发JS代码为止.但是,他们没有触发我的JavaScript代码.
根据文档,我在createViewInstance我的视图管理器的方法中用Java实现了事件处理程序:
map.setMapListener(new DelayedMapListener(new MapListener() {
public boolean onScroll(ScrollEvent event) {
WritableMap eventData = Arguments.createMap();
// Fill in eventData; details not important
ReactContext reactContext = (ReactContext)map.getContext();
reactContext.getJSModule(RCTEventEmitter.class).receiveEvent(
map.getId(),
"topChange",
eventData);
return true;
}
public boolean onZoom(ZoomEvent event) {
// Basically the same as above
}
}, 100));
Run Code Online (Sandbox Code Playgroud)
我的JS代码的相关部分基本上与上面链接的文档中的代码相同:
class OSMDroidMapView extends Component {
constructor(props) {
super(props);
this._onChange = this._onChange.bind(this);
}
_onChange(event: Event) {
console.log(event);
// Handle event data …Run Code Online (Sandbox Code Playgroud) React Native Android自定义视图能够在ViewManager子类中以两种不同的方式声明事件:
getExportedCustomBubblingEventTypeConstants()getExportedCustomDirectEventTypeConstants()这两种类型的事件有什么区别?
如果我尝试从Android自定义视图onClick(View v)方法发送事件直至其视图的JS表示形式,我将使用以下哪个方法来声明我的自定义事件名称?
后续行动:我最终使用“直接”事件将来自Android视图的点击发送回我的JS组件。这很好,但是我仍然想知道“冒泡”事件的全部含义。