Android開發(fā)中下拉刷新如何實現(xiàn)
因為最近的開發(fā)涉及到了網(wǎng)絡(luò)讀取數(shù)據(jù),那么自然少不了的就是下拉刷新的功能,搜索的方法一般是自己去自定義ListView或者RecyclerView來重寫OnTouch或者OnScroll方法來實現(xiàn)手勢的監(jiān)聽然后播放動畫最后刷新界面
今天說的是一個Google官方提供的下拉刷新布局,名字叫做SwipeRefreshLayout,找到這個布局的時候真的是喜出望外啊,下面來記錄一下它怎么用。
這里放一下效果圖先,就是下面這個小圈圈啦
首先是需要把這個布局套在我們需要刷新的控件之外,這里是RecyclerView
<android.support.v4.widget.SwipeRefreshLayout android:id="@+id/reglost_srl" android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.v7.widget.RecyclerView android:id="@+id/reglost_rv" android:layout_width="match_parent" android:layout_height="match_parent" /> </android.support.v4.widget.SwipeRefreshLayout>
當我們需要顯示或者隱藏刷新這個小動畫的時候,需要調(diào)用下面這個方法
public void setRefreshing(boolean refreshing)
但是,如果是剛開始的時候我們要顯示這個加載的動畫,不能直接把true傳入這個方法然后調(diào)用,因為我們在源代碼中可以看到SwipeRefreshLayout中的一個名為mOriginalOffsetTop的變量沒有被初始化,所以動畫是可能顯示不出來的,那么應(yīng)該怎樣來顯示呢?用下面的方法
refreshlayout.post(new Runnable() { @Override public void run() { refreshlayout.setRefreshing(true); } });
然后,我們還需要給動畫結(jié)束后添加一個監(jiān)聽
refreshlayout.setOnRefreshListener(this); @Override public void onRefresh() { refreshData(); // refresh the view }
當數(shù)據(jù)加載完成了,把動畫隱藏,很簡單
refreshlayout.setRefreshing(false);
到這里,其實已經(jīng)基本是全部的用法了,這個東西真的是方便,但是,不是就沒有一點問題了,稍不注意,其實還是會遇到一些問題的。
在網(wǎng)上的很多代碼中,不少的開發(fā)者都喜歡在從網(wǎng)絡(luò)加載數(shù)據(jù)前把數(shù)據(jù)集合清空,也就是在onRefresh方法中先調(diào)用data.clear(),但是這里會出現(xiàn)一個問題,如果正在加載的時候我們往上滑動界面,App就會直接Crash掉,看圖
這個問題其實也很簡單因為如果我們把數(shù)據(jù)清空了,但是列表沒有刷新,如果滑動產(chǎn)生的話就會去訪問data中的數(shù)據(jù),直接就越界了。
所以正確的做法應(yīng)該是先執(zhí)行聯(lián)網(wǎng)加載數(shù)據(jù),當數(shù)據(jù)加載完了就清空集合,重新填入并刷新。
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Android中網(wǎng)絡(luò)框架簡單封裝的實例方法
在本篇文章里小編給大家整理的是關(guān)于Android中網(wǎng)絡(luò)框架簡單封裝的實例方法,需要的朋友們可以學習下。2020-03-03Android利用FlexboxLayout輕松實現(xiàn)流動布局
flexbox是屬于CSS的一種布局方案,可以簡單、完整、響應(yīng)式的實現(xiàn)各種頁面布局。谷歌將其引入以提高復(fù)雜布局的能力。下面這篇文章主要給大家介紹了在Android中利用FlexboxLayout輕松實現(xiàn)流動布局的相關(guān)資料,需要的朋友可以參考借鑒,下面來一起看看吧。2017-04-04Android基于Sqlite實現(xiàn)注冊和登錄功能
這篇文章主要為大家詳細介紹了Android基于Sqlite實現(xiàn)注冊和登錄功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-04-04Android中利用ViewHolder優(yōu)化自定義Adapter的寫法(必看)
下面小編就為大家?guī)硪黄狝ndroid中利用ViewHolder優(yōu)化自定義Adapter的寫法(必看)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-04-04android 6.0 寫入SD卡的權(quán)限申請實例講解
今天小編就為大家分享一篇android 6.0 寫入SD卡的權(quán)限申請實例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-08-08SurfaceView播放視頻發(fā)送彈幕并實現(xiàn)滾動歌詞
這篇文章主要為大家詳細介紹了SurfaceView播放視頻發(fā)送彈幕并實現(xiàn)滾動歌詞,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-11-11Jetpack Compose實現(xiàn)對話框和進度條實例解析
對話框和進度條其實并無多大聯(lián)系,放在一起寫是因為兩者的內(nèi)容都不多,所以湊到一起,對話框是我們平時開發(fā)使用得比較多的組件,進度條的使用頻率也很高,比如下載文件,上傳文件,處理任務(wù)時都可以使用進度條2023-04-04