2017-01-04 5 views
2

Ich habe mit einem seltsamen Problem in Switch-Komponenten in React Native gekämpft, wenn in Android-App ausgeführt.react-native: Switch Component onValueChange wird nicht in Android aufgerufen

Lassen Sie uns sagen, ich habe eine Komponente haben, die Methode wie folgt machen aussieht:

render() { 
return (
    <View> 
    <View> 
     <Text> 
     Test Title 
     </Text> 
     <Switch 
     value={ this.state.value } 
     onValueChange={ 
      this.test.bind(this) 
     } 
     /> 
    </View> 
    </View> 
); 

}

Die test Methode ist:

constructor(props){ 
    super(props); 
    this.state = { 
    value: true 
    }; 
} 


test(){ 
this.setState({value: !this.state.value}) 
} 

Als ich mein Modul in meinem iOS laufen App die onValueChange Methode wird aufgerufen und alles funktioniert wie erwartet, aber wenn ich das gleiche in meiner Android App die Methode nie aufgerufen wird, wenn die Bewertung e wird in false geändert. Mehr noch, ich kann den Wert nicht mehr als einmal ändern, d. H. Ich kann den Wert nur auf false setzen und es wird mir nicht erlauben, danach auf true zu setzen. Die einzige Möglichkeit, mit dem switch-Element zu spielen, besteht darin, den Balken zu halten, aber der Wert wird niemals geändert (Die Schalterkomponente ändert ihre Farbe nicht), noch die aufgerufene Methode.

Hat jemand etwas ähnliches vor? Ist das ein Problem mit RN und seiner Switch-Komponente für Android?

Ich verwende:

  • reagieren: 15.4.1
  • reagieren-native: 0,39

*** Anmerkung 1: Die onValueChange aufgerufen wird, wenn ich in meinem RN Code setzen eine Aktivität, aber es scheitert, wenn es in einem Fragment ist.

+0

Ein ähnliches Problem mit der Android Picker RN-Komponente –

Antwort

1

Versuchen Sie dies.

constructor(props){ 
    super(props); 
    this.state = { 
     value: true 
    }; 
} 

und in Ihrem machen

render() { 
    return (
     <View> 
     <Text> 
      Test Title 
     </Text> 
     <Switch 
      value={ this.state.value } 
      onValueChange={(value) => this.setState({value})} 
     /> 
     </View> 
    ); 
    } 

Sie können Ihre test() Funktion

+0

Vielen Dank, ich habe versucht, auf diese Weise und es funktioniert immer noch nicht, eigentlich ist der Code oben ein Beispiel und meine echte Render-Methode hat: ' { this.props.onChangeValue (this.props.index, {... Artikel, Wert}) } } style = {this.props.style. switch_elem} /> '. PS: Ich validiere die Requisiten usw., wie gesagt, es funktioniert für iOS.Deshalb frage ich mich, ob es ein besonderes Problem bei RN ist oder ob mir etwas fehlt. –

+0

es wirft Wert nicht definiert :( – Danish

+0

@Danish können Sie Ihren vollständigen Fehler und Ihren Code ..? –

0

was für mich entfernen Dies ist,

constructor(props) { 
     super(props) 
     this.state = { 
      isOpen : false 
     } 
     this.onControlChange = this.onControlChange.bind(this); 
    } 

onControlChange(value) { 

    return this.setState({ 
     isOpen: !this.state.isOpen 
    }); 
} 

und im Gegenzug auf diese Weise verwenden

render() { 
    return (
     <Switch 
      onValueChange={this.onControlChange} 
      value={this.state.isOpen} 
     /> 
    ) 
} 

so glaube ich, dass Sie für Ihre Funktion im Konstruktor verbindlich erklären sollten. Ich habe das nur für den Android-Emulator getestet.

Hoffe, das hilft.

Verwandte Themen