顯示廣告
隱藏 ✕
看板 Knuckles_note
作者 Knuckles (站長 那克斯)
標題 [AndroidStudio] 加上下拉更新功能 SwipeRefresh
時間 2015-12-19 Sat. 13:19:30


由於我們是把下載資料的動作 loadData 寫在 MainActivity 的 onCreate
只有在 APP 第一次打開的時候會執行到
離開 APP 後過陣子再打開還是舊的內容
所以必需加個手動更新資料的功能

現在各種 APP 普遍使用的方法都是用下拉更新
就是在列表滑到頂的時候,再往下拉一段距離後放開,就會啟動更新的動作


修改 activity_main.xml

把 <ListView> 用 <android.support.v4.widget.SwipeRefreshLayout> 包起來
像這樣
<android.support.v4.widget.SwipeRefreshLayout 
        android:id="@+id/swiperefresh" 
        android:layout_width="match_parent" 
        android:layout_height="match_parent" >
	

	
<ListView  />
	
	

</android.support.v4.widget.SwipeRefreshLayout>
	
	



修改 MainActivity.java

在 public class MainActivity … 下一行的地方
加上一個類別的成員變數
    SwipeRefreshLayout mSwipeLayout;

在成員函式 onCreate 裡加上
        mSwipeLayout = (SwipeRefreshLayout) findViewById(R.id.swiperefresh);
        mSwipeLayout.setOnRefreshListener(this);
        mSwipeLayout.setColorSchemeColors(Color.BLUE); //重整的圖示用藍色

點一下畫紅線的 this,按 Alt+Enter
選「Make 'MainActivity' implement 'android.support.v4.widget.SwipeRefreshLayout.OnRefreshListener'」
[圖]


這樣會自動在類別 implements 的部份多加個 SwipeRefreshLayout.OnRefreshListener

接著會詢問是否加上成員函式 onRefresh,點OK
[圖]


在自動產生的成員函式 onRefresh 裡加上使用下拉更新後要做的事
例如我們要執行 loadData(); 改成像這樣
    @Override
    public void onRefresh() {
        loadData(); //下載並更新列表的資料
    }


在成員函式 loadData 裡,在 client.get 後的 onSuccess 與 onFailure 裡加上
                mSwipeLayout.setRefreshing(false); //結束更新動畫
在載入資料完成時結束 SwipeRereshLayout 的動畫


執行看看,當列表已滑至頂端時,再往下滑
會出現一個重整的圖示,此時放開即可執行更新資料的動作
[圖]




參考
http://developer.android.com/intl/zh-tw/training/swipe/add-swipe-interface.html#AddSwipeWidget
http://brianchen85.blogspot.tw/2015/06/android-refresh-listview.html


--
※ 作者: Knuckles 時間: 2015-12-19 13:19:30
※ 編輯: Knuckles 時間: 2015-12-30 19:04:38
※ 看板: KnucklesNote 文章推薦值: 0 目前人氣: 0 累積人氣: 996 
分享網址: 複製 已複製
r)回覆 e)編輯 d)刪除 M)收藏 ^x)轉錄 同主題: =)首篇 [)上篇 ])下篇