React Native(FlatList下拉刷新,上拉加载,2

作者: 苹果雪梨渣 | 来源:发表于2017-09-13 16:28 被阅读756次
多选.gif

1.头部/尾部
2.item项/item项分割线
3.滚动到某item项
4.是否隐藏水平,垂直滚动条
5.上啦加载(测试数据有点问题,比较难模拟),下拉刷新

import React, {Component, PropTypes} from 'react'
import {
    View,
    Dimensions,
    ListView,
    TextInput,
    Image,
    Text,
    FlatList,
    RefreshControl,
    TouchableOpacity,
} from 'react-native'

let {width, height} = Dimensions.get('window');


export default class TestListPage2 extends Component {

    //构造函数
    constructor(props) {
        super(props)

        this.state = {
            refreshing: false,
            isLoreMoreing: 'LoreMoreing',
            dataSource: [],

        }
        this.responseData = [];
    }


    componentDidMount() {
        // this.Refresh();
        //模拟请求后台返回的数据

    }


    Refresh = ()=> {

        this.setState({
            refreshing: true,
        });


        setTimeout(() => {
            //默认选中第二个
            this.responseData = [
                {id: 100}, {id: 101}, {id: 102}, {id: 103}, {id: 104}
            ]
            this.setState({
                refreshing: false,
                dataSource: this.responseData
            });
            this.isLoreMore = false;
        }, 2000);
    }

    isLoreMore = false;
    LoreMore = ()=> {

        if (this.isLoreMore == false) {
            this.setState({
                isLoreMoreing: 'LoreMoreing',
            });

            this.isLoreMore = true;
            this.responseData = this.responseData.concat({id: '加载的新数据'});
            setTimeout(() => {
                this.setState({
                    dataSource: this.responseData,
                })
            }, 500);

            setTimeout(() => {
                this.setState({
                    isLoreMoreing: 'LoreMoreEmpty'
                })
            }, 500);
        }
    }


    render() {
        return (
            <View style={{flex: 1}}>
                <View style={{
                    marginTop: 20,
                    height: 44,
                    width: width,
                    justifyContent: 'center',
                    backgroundColor: 'gray',
                    alignItems: 'center',
                    flexDirection: 'row'
                }}>
                    <Text onPress={this.Refresh}>{'点击刷新     '}</Text>

                    <Text onPress={()=> {
                        this._flatList.scrollToIndex({viewPosition: 0, index: 4})
                    }}>{'点击滚动到第4个'}</Text>


                </View>
                <FlatList
                    showsVerticalScrollIndicator={false}//是否显示垂直滚动条
                    showsHorizontalScrollIndicator={false}//是否显示水平滚动条
                    numColumns={1}//每行显示1个
                    ref={(flatList)=>this._flatList = flatList}
                    ListHeaderComponent={this.renderHeader}//头部
                    ListFooterComponent={this.renderFooter}//尾巴
                    renderItem={this.renderRow}//每行显示一项
                    ItemSeparatorComponent={this.renderSeparator}//每行底部---一般写下划线
                    enableEmptySections={true}//数据可以为空
                    keyExtractor={(item, index)=>item.key = index}
                    onEndReachedThreshold={0.1}//执行上啦的时候10%执行
                    onEndReached={this.LoreMore}
                    data={this.state.dataSource}
                    refreshControl={
                        <RefreshControl
                            refreshing={this.state.refreshing}
                            onRefresh={this.Refresh}
                            title="Loading..."/>
                    }
                />
            </View>
        );
    }


    renderRow = (item) => {
        let rowData = item.item;
        let index = rowData.key
        return (
            <View style={{height: 150, backgroundColor: 'white', justifyContent: 'center', alignItems: 'center'}}>
                <Text>{rowData.id}</Text>
            </View>
        )
    }

    renderSeparator = ()=> {
        return (
            <View style={{height: 1, backgroundColor: 'rgb(200,200,200)',}}/>
        )
    }


    renderHeader = ()=> {
        return (
            <View style={{
                height: 44,
                width: width,
                justifyContent: 'center',
                backgroundColor: 'red',
                alignItems: 'center'
            }} activeOpacity={1}>
                <Text>{'我是头部'}</Text>
            </View>
        )
    }


    renderFooter = ()=> {

        if (this.state.dataSource.length != 0 && this.state.isLoreMoreing == 'LoreMoreing') {
            return (
                <View style={{
                    height: 44,
                    backgroundColor: 'rgb(200,200,200)',
                    justifyContent: 'center',
                    alignItems: 'center'
                }}>
                    <Text>{'正在加载....'}</Text>
                </View>
            )
        } else if (this.state.isLoreMoreing == 'LoreMoreEmpty') {
            return (
                <View style={{
                    height: 44,
                    backgroundColor: 'rgb(200,200,200)',
                    justifyContent: 'center',
                    alignItems: 'center'
                }}>
                    <Text>{'暂无更多'}</Text>
                </View>
            )
        } else {
            return null
        }

    }


}

相关文章

网友评论

本文标题:React Native(FlatList下拉刷新,上拉加载,2

本文链接:https://www.haomeiwen.com/subject/nthlsxtx.html