Shivam
Shivam

Reputation: 3131

React Native two taps required for onPress to work

I have created an autoconplete search field which displays the places using mapbox API. I am using the ListView for sugesstions list. when list appears and I tap on the address i need to select, on the first tap keyboard hides and onPress works in the second tap.

enter image description here

I am trying to figure out what's wrong.

 <View style={styles.container}>
                          <View style={styles.searchContainer}>
                            <View style={styles.mapMarkerContainer}>
                              {mapMarkerIcon}
                            </View>
                            <View style={styles.inputContainer}>
                              <TextInput
                                  style={styles.textinput}
                                  onChangeText={this.searchLocation}
                                  placeholder="Type your address here" 
                                  underlineColorAndroid='rgba(0,0,0,0)'
                                  value={this.state.inputVal}
                                  placeholderTextColor="#fff"
                              />
                            </View>
                          </View>
                          <View keyboardShouldPersistTaps='always' style={styles.listViewContainer}>
                            <ListView
                                dataSource={ds.cloneWithRows(this.state.searchedAdresses)}
                                renderRow={this.renderAdress} 
                                style={styles.listView}
                                renderSeparator={this.renderSeparator}
                                enableEmptySections
                            />
                          </View>
</View>

renderAddress

renderAdress = (address) => {
        return (
            <TouchableOpacity onPress={() => this.onListItemClicked(address)} style={styles.listItem}>
                <View>
                    <Text>{address.place_name}</Text>
                </View>
            </TouchableOpacity>
        );
};

onListItemClicked

onListItemClicked= (address) => {
      this.props.onAddressGet(address);
      console.log(address);
      this.setState({
        searchedAdresses: [],
        inputVal: address.place_name
      });
}

Upvotes: 4

Views: 4520

Answers (1)

itinance
itinance

Reputation: 12388

You should move the keyboardShouldPersistTaps-property to the ListView as it is a property from ScrollView and will be inherited to ListView:

Instead of

<View keyboardShouldPersistTaps='always' 
    <ScrollView ...>

You need:

<View 
    <ScrollView keyboardShouldPersistTaps='always'  ...>

https://facebook.github.io/react-native/docs/scrollview.html#keyboardshouldpersisttaps

Upvotes: 4

Related Questions