点击自定义主题导致模拟器直接卡死
来源:11-1 构建自定义多彩主题页面

慕仔3427096
2018-08-30
在my页面里点击自定义主题 模拟器立即卡死 什么也点不了 但是我的里的列表可以滚动 不知道为什么 刚开始的时候modal还能出来,突然就不行了 必须重新加载代码才能点,但是一点自定义又卡死 也没开debug啥的 不知道是不是数据请求造成的 自定义主题页 import React from 'react'; import { View, Text, Image, ScrollView, TouchableHighlight, Modal, StyleSheet, Platform } from 'react-native'; import globalStyle from '../../assets/styles/globalStyle'; import { ThemeFlags } from '../../assets/styles/themeFactory'; export default class CustomTheme extends React.Component { constructor(props) { super(props); } getThemeItemView(key) { return <TouchableHighlight style={{flex: 1}} underlayColor={'#ffffff'} onPress={() => this.onSelectTheme(key)} > <View style={[{backgroundColor: ThemeFlags[key]},styles.themeItem]}> <Text style={styles.themeText}>{key}</Text> </View> </TouchableHighlight> } onSelectTheme(key) { this.props.onClose() } renderThemView() { let views = []; let keys = Object.keys(ThemeFlags); for (var i = 0; i < keys.length; i+=3) { views.push( <View key={i} style={{flexDirection: 'row'}}> {this.getThemeItemView(keys[i])} {this.getThemeItemView(keys[i+1])} {this.getThemeItemView(keys[i+2])} </View> ) } console.log(views) return views } renderThemeContent() { return <Modal animationType={"slide"} transparent={true} visible={this.props.visible} onRequestClose={() => this.props.onClose()} > <View style={styles.modalContainer}> <ScrollView> {this.renderThemView()} </ScrollView> </View> </Modal> } render() { let view = this.props.visible ? <View style={globalStyle.root_container}> {this.renderThemeContent()} </View>:null return view } } const styles = StyleSheet.create({ modalContainer: { flex: 1, margin:10, marginTop:Platform.OS==='ios'?20:10, backgroundColor:'white', borderRadius:3, shadowColor:'gray', shadowOffset:{width:2,height:2}, shadowOpacity:0.5, shadowRadius:2, padding:3 }, themeItem: { flex: 1, height: 120, margin:3, padding:3, borderRadius:2, alignItems: 'center', justifyContent: 'center', }, themeText:{ color:'#ffffff', fontWeight:'500', fontSize:16 } })
我的页面
import React from 'react';
import { View, Text, Image, ScrollView, TouchableHighlight, StyleSheet } from 'react-native';
import NavigationBar from '../commons/navigationBar';
import { FLAG_LANGUAGE } from '../commons/LanguageDao';
import { MORE_MENU } from '../commons/MoreMenu';
import globalStyle from '../../assets/styles/globalStyle';
import viewUtils from '../../tools/viewUtils';
import CustomTheme from './CustomTheme';
export default class My extends React.Component {
constructor(props) {
super(props);
this.state = {
isShowCustomeTheme: false
}
}
onclick(tag) {
let targetRouteName, params = {};
switch (tag) {
case MORE_MENU.Custom_Language:
targetRouteName = 'CustomKeyPage';
params.flag = FLAG_LANGUAGE.flag_language;
break;
case MORE_MENU.Sort_Language:
targetRouteName = 'SortKeyPage';
params.flag = FLAG_LANGUAGE.flag_language;
break;
case MORE_MENU.Custom_Key:
targetRouteName = 'CustomKeyPage';
params.flag = FLAG_LANGUAGE.flag_key;
break;
case MORE_MENU.Sort_Key:
targetRouteName = 'SortKeyPage';
params.flag = FLAG_LANGUAGE.flag_key;
break;
case MORE_MENU.Remove_Key:
targetRouteName = 'CustomKeyPage';
params.flag = FLAG_LANGUAGE.flag_key;
params.isRemove = true;
break;
case MORE_MENU.Custom_Theme:
this.setState({isShowCustomeTheme: true})
break;
case MORE_MENU.About_Author:
targetRouteName = 'AboutMe'
break;
case MORE_MENU.About:
targetRouteName = 'About';
break;
}
if (targetRouteName) {
this.props.navigation.navigate(targetRouteName, params)
}
}
getItem(tag, icon, text) {
return viewUtils.getSettingItem(() => this.onclick(tag), icon, text, {tintColor: '#2196f3'}, null)
}
renderCustomTheme() {
return (
<CustomTheme
{...this.props}
visible={this.state.isShowCustomeTheme}
onSelectTheme={(themeKey) => this.onSelectTheme(themeKey)}
onClose={() => this.setState({isShowCustomeTheme: false})}
/>
)
}
render() {
return (
<View style={globalStyle.root_container}>
<NavigationBar title="我的" />
<ScrollView>
<TouchableHighlight
onPress={() => this.onclick(MORE_MENU.About)}
>
<View style={[styles.item, {height: 90}]}>
<View style={styles.itemLeft}>
<Image
source={require('../../assets/images/ic_trending.png')}
style={[{width: 40,height: 40,marginRight: 10}, {tintColor: '#2196f3'}]}
/>
<Text>GitHub Popular</Text>
</View>
<Image
source={require('../../assets/images/ic_tiaozhuan.png')}
style={[{width: 22,height: 22,marginRight: 10}, {tintColor: '#2196f3'}]}
/>
</View>
</TouchableHighlight>
<View style={globalStyle.line} />
{/*语言管理*/}
<Text style={styles.groupTitle}>语言管理</Text>
<View style={globalStyle.line} />
{this.getItem(MORE_MENU.Custom_Language, require('../../assets/images/ic_custom_language.png'), '自定义语言')}
<View style={globalStyle.line} />
{/*语言排序*/}
{this.getItem(MORE_MENU.Sort_Language, require('../../assets/images/ic_swap_vert.png'), '语言排序')}
{/*标签管理*/}
<Text style={styles.groupTitle}>标签管理</Text>
<View style={globalStyle.line} />
{this.getItem(MORE_MENU.Custom_Key, require('../../assets/images/ic_custom_language.png'), '自定义标签')}
<View style={globalStyle.line} />
{/*标签排序*/}
{this.getItem(MORE_MENU.Sort_Key, require('../../assets/images/ic_swap_vert.png'), '标签排序')}
{/*标签移除*/}
<View style={globalStyle.line} />
{this.getItem(MORE_MENU.Remove_Key, require('../../assets/images/ic_remove.png'), '标签移除')}
{/*设置*/}
<Text style={styles.groupTitle}>设置</Text>
<View style={globalStyle.line} />
{/*自定义主题*/}
{this.getItem(MORE_MENU.Custom_Theme, require('../../assets/images/ic_view_quilt.png'), '自定义主题')}
<View style={globalStyle.line} />
<View style={globalStyle.line} />
{/*关于作者*/}
{this.getItem(MORE_MENU.About_Author, require('../../assets/images/ic_insert_emoticon.png'), '关于作者')}
<View style={globalStyle.line} />
</ScrollView>
{this.renderCustomTheme()}
</View>
)
}
}
const styles = StyleSheet.create({
container: {
flex: 1,
},
item: {
flexDirection: 'row',
alignItems: 'center',
justifyContent: 'space-between',
padding: 10,
height: 60,
backgroundColor: '#fff'
},
itemLeft: {
flexDirection: 'row',
alignItems: 'center'
},
groupTitle: {
marginLeft: 10,
marginTop: 10,
marginBottom: 5,
fontSize: 12,
color: 'gray'
}
})
好像是有时候卡死有时候只是有点卡,弹框能出来 如果我把debug打开 反而不卡了 真是神奇。。。。。还老报这种警告
1回答
-
CrazyCodeBoy
2018-08-31
这种情况比较诡异试下下面这种方式:
关闭终端,删除node_modules 删除APP,或换个模拟器重新安装运行;
00
相似问题