FC 12.6 下拉重新整理
阿新 • • 發佈:2018-11-25
前幾篇文章已經將介面寫的差不多了,接下來新增下拉重新整理的功能
Material Design 中制定了Android的統一的下拉重新整理的風格,SwipeRefreshLayout(support-v4)是用於實現下拉重新整理的核心類。
新增下拉重新整理
- 修改activity_main.xml
- 在RecycleView外層巢狀SwipeRefreshLayout(由於Recycleview變成了RefreshLayout的子控制元件,因此需要將屬性app:layout_behavior="@string/appbar_scrolling_view_behavior"放到SwipeRefreshLayout裡)
- 修改MainActivity
- (通過findViewById繫結控制元件)
- 呼叫setColorSchemeResources方法來設定下來重新整理進度條的顏色,這裡使用了主題中的colorPrimary顏色
- 呼叫setOnRefreshListener方法來設定下拉重新整理的監聽器,在onRefresh新增我們的邏輯
- 新增refreshFruits方法作為我們重新整理時的操作
- 先開啟一個執行緒休眠2s(這樣我們就可以看到重新整理的動作)
- 然後使用runOnUiThread將執行緒切回主執行緒,呼叫initFruits方法重新生成資料
- 呼叫adapter的notifyDataSetChanged通知資料發生變化
- 呼叫setRefreshing方法,傳入false表示重新整理時間結束,並隱藏重新整理進度條
<?xml version="1.0" encoding="utf-8"?> <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/drawer_Layout" android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.design.widget.CoordinatorLayout android:layout_width="match_parent" android:layout_height="match_parent"> ... <android.support.v4.widget.SwipeRefreshLayout android:id="@+id/swipe_refresh" android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior"> <android.support.v7.widget.RecyclerView android:id="@+id/recycle_view" android:layout_width="match_parent" android:layout_height="match_parent" /> </android.support.v4.widget.SwipeRefreshLayout> ... </android.support.design.widget.CoordinatorLayout> </android.support.v4.widget.DrawerLayout>
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
...
//此處設定滑動重新整理
swipeRefresh = (SwipeRefreshLayout) findViewById(R.id.swipe_refresh);
swipeRefresh.setColorSchemeResources(R.color.colorPrimary);
swipeRefresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
refreshFruits();
}
});
...
}
private void refreshFruits() {
new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
runOnUiThread(new Runnable() {
@Override
public void run() {
initFruits(); //重新生成資料
adapter.notifyDataSetChanged();//通知資料發生變化
swipeRefresh.setRefreshing(false);//重新整理結束事件,並隱藏進度條
}
});
}
}).start();
}
執行,如圖