反応ネイティブ アプリでネイティブ UI コンポーネントを介して Android の AutoCompleteTextview を使用しています。テキスト変更イベントを渡してネイティブ アプリに反応させることはできますが、アイテム クリック イベントを渡してネイティブに反応させることはできません。
ここに私のJAVAコードがあります
view.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
WritableMap event = Arguments.createMap();
event.putString("selectedText", optionList.get(position));
ReactContext reactContext = (ReactContext) view.getContext();
reactContext.getJSModule(RCTEventEmitter.class).receiveEvent(
view.getId(),
"topSelect",
event);
}
});
以下は私の反応するネイティブコードです
import PropTypes from 'prop-types';
import React from 'react'
import { requireNativeComponent, View } from 'react-native';
class AutoCompleteTextView extends React.Component {
constructor(props) {
super(props);
this._onChange = this._onChange.bind(this);
this._onSelect = this._onSelect.bind(this);
}
_onChange(event: Event) {
console.log(event.nativeEvent.text);
if (!this.props.onTextChange) {
return;
}
this.props.onTextChange(event.nativeEvent.text);
}
_onSelect(event: Event) {
console.log(event);
if (!this.props.itemClickListener) {
return;
}
this.props.itemClickListener(event.nativeEvent.selectedText);
}
render() {
return <RCTAutoCompleteTextView {...this.props} onChange={this._onChange} onSelect={this._onSelect} />;
}
}
AutoCompleteTextView.propTypes = {
dataSource: PropTypes.array.isRequired,
value: PropTypes.string.isRequired,
onTextChange: PropTypes.func.isRequired,
itemClickListener: PropTypes.func.isRequired,
showDropDown: PropTypes.bool,
showDropDownArrow: PropTypes.bool,
hint: PropTypes.string,
...View.propTypes
};
var RCTAutoCompleteTextView = requireNativeComponent(`RCTAutoCompleteTextView`, AutoCompleteTextView, {
nativeOnly: {onChange: true, onSelect: true}
});
export { AutoCompleteTextView }
しかし、コンソールログを見ると、選択イベントはありません。ここで何が問題になっているのか、誰でも指摘できますか?