react native簡單實現上拉加載更多

下拉刷新的工具我用的是:react-native-pullrefresh-scrollview王财,上拉加載更多沒找到棉安,所以自己動手做了一個苏章,其實這個上拉加載更多不難攻晒,大概的思路就是將ListView的數據最后添加空數據顾复,在renderRow中判斷是否最后一行,然后返回ActivityIndicator組件鲁捏。當然這只是大概思路芯砸,具體還要做一些細節(jié)判斷防止諸如內容高度比容器高度小的時候觸發(fā)加載更多等問題。下面我講解一下我的做法给梅。
  1. 首先創(chuàng)建數據加載函數
_getRecord(type, refresh) {
        if (type == 1) { // 判斷 1 為下拉刷新啊假丧,2為上啦加載更多
            this.page = 1;
            if (refresh == null) {
            }
        }
        else {
            if (this.state.isLoadingMore == true) {
                return;
            } 
            this.page ++;
            this.setState({isLoadingMore: true});
        }
        var body = null;
        // 處理傳入參數,插入page頁面
        if (this.networkParams[1].indexOf("@") != -1) {
            var bodyArr = this.networkParams[1].split("@");
            var body = bodyArr[0]+this.page+bodyArr[1];
        }
        setTimeout(function () { // 測試專用动羽,延時3秒
            fetch(this.networkParams[0]+body)
                .then((response) => response.json())
                .then((responseJson) => {
                    if (refresh != undefined && refresh != null) {
                        // 這里很奇怪包帚,我在自己的項目里面的類只里正常,下拉刷新解鎖正常运吓,但是這里說什么refresh undefined渴邦,什么鬼。
                        // refresh.onRefreshEnd();
                    }
                    else {
                    }
                    if (type == 2) {
                        this.setState({isLoadingMore: false});
                    }
                    if (Public._notNullOrUndefined(responseJson)) {
                        if (responseJson.tracks.length > 0) {
                            if (type == 1) {
                                var temp = responseJson.tracks;
                                temp.push("");  // push一個空值
                                this.setState({theNetworkData: temp});
                            }
                            else {
                                var temp = this.state.theNetworkData;
                                temp.pop();
                                temp = temp.concat(responseJson.tracks);
                                temp.push("");
                                this.setState({theNetworkData: temp});
                            }
                            // 判斷是否已經到盡頭拘哨,是的話谋梭,上拉將不再觸發(fā)數據加載任務
                            if (responseJson.tracks.length < this.defaultPageItem) {
                                this.canLoadMore = false;
                            }
                            else {
                                this.canLoadMore = true;
                            }
                        }
                    }
                    else {
                        this.page --;
                    }
                })
                .catch((error) => {
                    // this.page --;
                    // if (refresh != null) {
                    //     refresh.onRefreshEnd();
                    // }
                    // else {
                    //     Public.hideHUD();
                    // }
                    // if (type == 2) {
                    //     this.setState({isLoadingMore: false});
                    // }
                });
        }.bind(this), 3000);
  1. _onRefresh,_onEndReached倦青,renderRow
  _onRefresh(refresh) { // 下拉刷新觸發(fā)
        this._getRecord(1, refresh);
    }
    _onEndReached(event) { // 上啦加載觸發(fā)
        // 只要用于防止在內容高度低于容器高度的時候出發(fā)加載數據函數
        if (this.tbvOffsetY > 5 && this.canLoadMore == true) {
            this._getRecord(2,null);
        }
    }
_renderRow(rowData, sectionId, rowId) {
        if (rowId == this.state.theNetworkData.length - 1) { // 判斷最后一行
            return (<ActivityIndicator style={{height: 50}} animating={this.state.isLoadingMore} color="black" />);
        }
        return this.renderRowCallback(rowData, sectionId, rowId);
    }

4.調用(上面是封裝的CustomListView控件)

<TestListView tbvHeight={Public.kHeight-64-3}
                              ref={(e)=>this.tbv = e}
                              defaultPageItem={4} // 設置一個值瓮床,通常是和請求url設置的每一頁n條數據的n一致,用來判斷是否已經是加載的最后一頁产镐,若是纤垂,則以后不再觸發(fā)上啦加載更多函數,直到下拉刷新磷账。
                              renderRowCallback={(rowData, sectionId, rowId)=>this._renderRow(rowData, sectionId, rowId)} 
                              networkParams={["http://v5.pc.duomi.com/search-ajaxsearch-searchall?", 'kw=相愛&pi=@&pz=4', "kFinancialRecords"]}
                />

然后這個是_renderRow在當前類實現一個自定義的item

  1. 效果
    loadmore.gif

    4.總結
    有需要的可以下載我的呆萌: Demo
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末峭沦,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子逃糟,更是在濱河造成了極大的恐慌吼鱼,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件绰咽,死亡現場離奇詭異菇肃,居然都是意外死亡,警方通過查閱死者的電腦和手機取募,發(fā)現死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進店門琐谤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人玩敏,你說我怎么就攤上這事斗忌≈世瘢” “怎么了?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵织阳,是天一觀的道長眶蕉。 經常有香客問我,道長唧躲,這世上最難降的妖魔是什么造挽? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮弄痹,結果婚禮上饭入,老公的妹妹穿的比我還像新娘。我一直安慰自己肛真,他們只是感情好谐丢,可當我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著毁欣,像睡著了一般庇谆。 火紅的嫁衣襯著肌膚如雪岳掐。 梳的紋絲不亂的頭發(fā)上凭疮,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天,我揣著相機與錄音串述,去河邊找鬼执解。 笑死,一個胖子當著我的面吹牛纲酗,可吹牛的內容都是我干的衰腌。 我是一名探鬼主播赠制,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼恍涂,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了脯丝?” 一聲冷哼從身側響起吮螺,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤饶囚,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后鸠补,有當地人在樹林里發(fā)現了一具尸體萝风,經...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年紫岩,在試婚紗的時候發(fā)現自己被綠了规惰。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡泉蝌,死狀恐怖歇万,靈堂內的尸體忽然破棺而出揩晴,到底是詐尸還是另有隱情,我是刑警寧澤堕花,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布文狱,位于F島的核電站,受9級特大地震影響缘挽,放射性物質發(fā)生泄漏瞄崇。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一壕曼、第九天 我趴在偏房一處隱蔽的房頂上張望苏研。 院中可真熱鬧,春花似錦腮郊、人聲如沸摹蘑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽衅鹿。三九已至,卻和暖如春过咬,著一層夾襖步出監(jiān)牢的瞬間大渤,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工掸绞, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留泵三,地道東北人。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓衔掸,卻偏偏與公主長得像烫幕,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子敞映,可洞房花燭夜當晚...
    茶點故事閱讀 42,722評論 2 345

推薦閱讀更多精彩內容