Как закрыть Android datepicker в react-native?

#javascript #android #reactjs #react-native #datepicker

#javascript #Android #reactjs #react-native #datepicker

Вопрос:

Недавно я создал экран блокировки с защитой от отпечатков пальцев для своего приложения react-native. По сути, когда пользователь покидает приложение и возвращается позже, появляется этот экран. Однако вчера я обнаружил, что на Android, если я открываю средство выбора даты, затем выхожу из приложения и возвращаюсь снова, средство выбора даты все еще существует:

datepicker

Я использую react-native-datepicker, который внутренне использует DatePickerAndroid и TimePickerAndroid.

Есть ли какой-нибудь способ закрыть средство выбора даты программно?

Ответ №1:

Это указано в самом документе, в нем есть метод, который называется onPressCancel()

Поэтому вам может потребоваться взять ссылку на datapicker, и тогда вызов метода с использованием этой ссылочной переменной поможет. Вы можете просто скрыть dataPicker в unmount или где-нибудь еще.

что-то вроде

 this.picker.onPressCancel();
  

проверьте ссылку

введите описание изображения здесь

Комментарии:

1. Метод, который вы упомянули, — это обратный вызов, запускаемый нажатием кнопки отмены.

2. Я думаю, вам следует прочитать описание там, оно четко написано onPressCancel - Manually close the date picker panel like, similarly pressing cancel btn

3. В документации не сказано, что он работает только на ios

Ответ №2:

Дайте ссылку на средство выбора даты

 <DatePicker
  ref={ref => this.datePicker = ref}
/>
  

чтобы закрыть средство выбора даты onPressCancel() , используйте этот метод

 this.datePicker.onPressCancel()
  

Ответ №3:

Добавьте это в свой onChange Prop

 if (Platform.OS !== 'ios') {
   setShowDatePicker(false); /* Or whatever you're using to set the state to false*/
}  

Ответ №4:

Это сработало для меня:

 componentDidMount() {
    this.listeners = [
        addListener('didFocus', () => {
            console.log("didFocus");
        }),
        addListener('willBlur', () => {
            console.log("willBlur");
            this.datePicker.onPressCancel();
        }),
    ];
}