反応ネイティブアプリにローダーアニメーションを実装しようとしていますが、ボタンをクリックしてもローダーがトリガーされません。ただし、アニメーションは既にtrue
に変更されています。
以下の私のコードをチェックしてください。
componentWillMount(){
this.hideLoader();
}
showLoader = () => { this.setState({ showLoader:true }); };
hideLoader = () => { this.setState({ showLoader:false }); };
doSignup = () => {
this.showLoader();
}
render() {
console.log(this.state.showLoader);
return (
<View>
<TouchableOpacity style={{ marginTop: 25 }} onPress={this.doSignup}>
<View style={[ styles.button, { backgroundColor: '#5a0060' } ]}>
<Text style={{ fontSize: 20, color: Colors.white }}>Sign Up Now</Text>
</View>
</TouchableOpacity>
<View style={{ position: 'absolute', top: 0, bottom: 0, right: 0, left: 0 }}>
<ActivityIndicator animating={this.state.showLoader} size="small" color="#00ff00" />
</View>
</View>
);
}
画面が読み込まれると、ローダーのアニメーションをfalse
に設定します。ボタンがクリックされたとき、true
に設定するだけでローダーをアニメーション化できますが、ローダーは表示されません。
私はあなたのコードをその論理的な骨組みに単純化しようとしました。これがうまくいき、スタイリングなどを追加できるようになることを願っています。
export default class LoginButton extends Component {
state = {
isLoading: false
};
showLoader = () => {
this.setState({ isLoading: true });
};
render() {
return (
<View>
<TouchableOpacity onPress={this.showLoader}>
<Text>Sign Up Now</Text>
</TouchableOpacity>
<ActivityIndicator animating={this.state.isLoading} />
</View>
);
}
}
既存のコードをいくつか修正しました。
ここでいくつかの重要な変更について言及します。
アクティビティインジケータービューでの位置
constructor(props) {
super(props);
this.doSignup = this.doSignup.bind(this);
this.state = {
showLoader:false
}
}
showLoader = () => { this.setState({ showLoader:true }); };
hideLoader = () => { this.setState({ showLoader:false }); };
doSignup(){
this.showLoader();
}
render() {
return (
<View style={{flex:1}}>
<TouchableOpacity style={{ marginTop: 25 }} onPress={this.doSignup}>
<View style={[ styles.button, { backgroundColor: '#5a0060' } ]}>
<Text style={{ fontSize: 20, color: "white" }}>Sign Up Now</Text>
</View>
</TouchableOpacity>
<View style={{ position: 'absolute', top:"50%",right: 0, left: 0 }}>
<ActivityIndicator animating={this.state.showLoader} size="large" color="red" />
</View>
</View>
);
}
問題はActivityIndicatorの位置にあります。
コンテナビューのスタイルを削除してみてください。ローダーが表示されます。
<View>
<ActivityIndicator animating={this.state.showLoader} size="small"
color="#00ff00" />
</View>