2017-06-20 69 views
1

我想在React Native中使用DatePickerAndroid。如何使用React Native DatePickerAndroid

德功能如下:

showAndroidDatePicker = async() => { 
     try { 
      const {action, year, month, day} = await DatePickerAndroid.open({ 
       date: this.state.selectedValue 
      }); 
      if (action !== DatePickerAndroid.dismissedAction) { 
       var date = new Date(year, month, day); 
       this.setState({selectedValue: date.toLocaleDateString()}); 
      } 
     } catch ({code, message}) { 
      console.warn('Cannot open date picker', message); 
     } 
    }; 

render功能如下:

render() { 
     let numbers = []; 
     for(var i=0; i<=this.props.max; i++) numbers.push((i + '')); 
     return (
      <View> 
       {this.renderModal()} 
       <ItemDetail selectItem={this.selectItem.bind(this)} resetItem={this.resetItem.bind(this)} title={this.props.title} value={formatDate(this.props.value)} icon={this.props.icon} /> 
      </View> 
     ) 
    } 

和渲染模式的功能如下:

renderModal() { 
     if(!this.state.itemPickerVisible) return; 

     let datePicker = <DatePickerIOS date={this.state.selectedValue} mode="date" timeZoneOffsetInMinutes={this.state.timeZoneOffsetInHours * 60} onDateChange={(date) => { this.setState({selectedValue: date})}} />; 
     if (Platform.OS === "android"){ 
      datePicker = this.showAndroidDatePicker() 
     } 

     return(
      <Modal animationType="fade" transparent={true} visible={this.state.itemPickerVisible}> 
       <View style={{flex: 1, flexDirection: 'column', justifyContent: 'flex-end'}}> 
        <View style={{flex: 1, backgroundColor: '#000', opacity: 0.4}}> 
        </View> 
        <View style={{backgroundColor: '#fff'}}> 
         <View style={{backgroundColor: '#ddd', flexDirection: 'row', justifyContent: 'space-between', padding: 7}}> 
          <Text style={{padding: 4}}>{this.props.title}</Text> 
          <TouchableHighlight onPress={this.selectedItem.bind(this)}> 
           <Text style={{padding: 4, color: s.colorDark}}>{gettext("Done")}</Text> 
          </TouchableHighlight> 
         </View> 
         <View>        
          {datePicker} 
         </View> 
        </View> 
       </View> 
      </Modal> 
     ) 
    } 

但当renderModal需求被渲染我得到一个错误:

enter image description here

回答

1

如果Platform.OS === "android",该datePicker变量将包含任何被showAndroidDatePicker返回,目前没有(实际上undefined)。要显示特定于平台的拾荒者,你可以使用下面的模式中:

<View> 
    {Platform.OS === 'ios' ? 
    <DatePickerIOS date={this.state.selectedValue} mode="date" timeZoneOffsetInMinutes={this.state.timeZoneOffsetInHours * 60} onDateChange={(date) => { this.setState({selectedValue: date})}} /> : 
    null 
    } 
</View> 

,并调用showAndroidDatePicker例如在componentDidMount

+0

谢谢,但这不是我正在寻找的答案。我知道如何显示特定于平台的选取器,但是我有android选取器的问题。你的回答不是我的问题的答案。我已经问过如何使用androidPicker,但我没有在这里看到。 – Boky

+0

您是否尝试过从'componentDidMount'调用'showAndroidDatePicker'?您目前尝试使用声明式jsx中的命令式代码的结果,这将不起作用。所以建议,尝试从'renderModal'中移除所有与android相关的东西,并调用组件装载上的android选择器。让我知道,如果这让你转发 – NiFi

+0

我得到相同的错误!你是如何解决它的? – Aayushi

相关问题