android使用SwipeRefreshLayout實(shí)現(xiàn)ListView下拉刷新上拉加載
本文實(shí)例為大家分享了android實(shí)現(xiàn)ListView下拉刷新上拉加載的具體代碼,供大家參考,具體內(nèi)容如下

這次使用的是系統(tǒng)的SwipeRefreshLayout實(shí)現(xiàn)下拉刷新,和設(shè)置ListView的滑動(dòng)監(jiān)聽判斷是否滑動(dòng)到最底部然后加載更多;
這個(gè)要比PullToRefreshListView簡(jiǎn)單很多,想PullToRefreshListView實(shí)現(xiàn)下拉刷新上拉加載的可以看這篇博客:
android使用PullToRefresh框架實(shí)現(xiàn)ListView下拉刷新上拉加載更多
至于使用哪一種大家可以根據(jù)產(chǎn)品的需求選擇,這兩種刷新目前為止世面上還是使用PullToRefreshListView的比較多;
首先說(shuō)下SwipeRefreshLayout的五個(gè)方法:
1、setOnRefreshListener():設(shè)置手勢(shì)滑動(dòng)監(jiān)聽器。
2、setProgressBackgroundColor():設(shè)置進(jìn)度圈的背景色。
3、setColorSchemeResources():設(shè)置進(jìn)度動(dòng)畫的顏色。
4、setRefreshing():設(shè)置組件的刷洗狀態(tài)。
5、setSize():設(shè)置進(jìn)度圈的大小
這個(gè)大家簡(jiǎn)單了解一下,下面代碼中都一一用到;
首先說(shuō)下布局文件,如果想用SwipeRefreshLayout實(shí)現(xiàn)下拉刷新必須把ListView寫到SwipeRefreshLayout布局里面;
<?xml version="1.0" encoding="utf-8"?> <android.support.v4.widget.SwipeRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/srfl"> <ListView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/listview" /> </android.support.v4.widget.SwipeRefreshLayout>
我這邊是自己寫的小Demo所以下拉的時(shí)候直接發(fā)送一個(gè)延時(shí)1秒的handler,然后添加數(shù)據(jù)刷新adapter;
上拉加載更多的時(shí)候直接給ListVIew設(shè)置了一個(gè)滑動(dòng)監(jiān)聽,判斷是否滑動(dòng)到adapter的最下面,然后加載數(shù)據(jù),刷新adapter;
public class MainActivity extends Activity {
private ListView mListView;
private SwipeRefreshLayout swipeRefreshLayout;
private List<String> stringList=new ArrayList<>();
private ArrayAdapter<String> adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
for (int x=0 ; x<16;x++){
stringList.add("新浪微博:搏擊愛好者Z"+"---"+x);
}
initView();
}
private void initView() {
swipeRefreshLayout= (SwipeRefreshLayout) findViewById(R.id.srfl);
//設(shè)置進(jìn)度圈的大小;(這里面只有兩個(gè)值SwipeRefreshLayout.LARGE和DEFAULT,后者是默認(rèn)效果)
swipeRefreshLayout.setSize(SwipeRefreshLayout.LARGE);
//設(shè)置進(jìn)度圈的背景色。這里隨便給他設(shè)置了一個(gè)顏色:淺綠色
swipeRefreshLayout.setProgressBackgroundColorSchemeColor(Color.CYAN);
//設(shè)置進(jìn)度動(dòng)畫的顏色。這里面最多可以指定四個(gè)顏色,我這也是隨機(jī)設(shè)置的,大家知道怎么用就可以了
swipeRefreshLayout.setColorSchemeResources(android.R.color.holo_orange_dark
,android.R.color.holo_blue_dark
,android.R.color.holo_red_dark
,android.R.color.widget_edittext_dark);
mListView= (ListView) findViewById(R.id.listview);
adapter = new ArrayAdapter<>(MainActivity.this, android.R.layout.simple_list_item_1, stringList);
mListView.setAdapter(adapter);
//設(shè)置手勢(shì)滑動(dòng)監(jiān)聽器
swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
public void onRefresh() {
//發(fā)送一個(gè)延時(shí)1秒的handler信息
handler.sendEmptyMessageDelayed(199,1000);
}
});
//給listview設(shè)置一個(gè)滑動(dòng)的監(jiān)聽
mListView.setOnScrollListener(new AbsListView.OnScrollListener() {
//當(dāng)滑動(dòng)狀態(tài)發(fā)生改變的時(shí)候執(zhí)行
public void onScrollStateChanged(AbsListView view, int scrollState) {
switch (scrollState){
//當(dāng)不滾動(dòng)的時(shí)候
case AbsListView.OnScrollListener.SCROLL_STATE_IDLE:
//判斷是否是最底部
if(view.getLastVisiblePosition()==(view.getCount())-1){
for(int x=0;x<5;x++){
stringList.add(stringList.size(),"魔獸世界"+x);
}
adapter.notifyDataSetChanged();
}
break;
}
}
//正在滑動(dòng)的時(shí)候執(zhí)行
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
}
});
}
private Handler handler=new Handler(){
@Override
public void handleMessage(Message msg) {
if(msg.what==199){
stringList.add(0,"英雄聯(lián)盟");
adapter.notifyDataSetChanged();
//設(shè)置組件的刷洗狀態(tài);false代表關(guān)閉
swipeRefreshLayout.setRefreshing(false);
}
}
};
}
這里面為了給大家演示SwipeRefreshLayout的幾個(gè)方法,如果全部使用默認(rèn)可以把setProgressBackgroundColor():setColorSchemeResources():setSize():這三個(gè)方法去掉。
這樣代碼會(huì)更少,默認(rèn)效果也非常不錯(cuò),這個(gè)看大家需求。
源碼下載地址
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Android自定義ListView實(shí)現(xiàn)下拉刷新上拉加載更多
- android RecycleView實(shí)現(xiàn)下拉刷新和上拉加載
- 解決android viewmodel 數(shù)據(jù)刷新異常的問題
- Android巧用XListView實(shí)現(xiàn)萬(wàn)能下拉刷新控件
- Android自定義view仿微信刷新旋轉(zhuǎn)小風(fēng)車
- Android自定義控件ListView下拉刷新的代碼
- Android ExpandableListView實(shí)現(xiàn)下拉刷新和加載更多效果
- Android RecyclerView的刷新分頁(yè)的實(shí)現(xiàn)
- android使用PullToRefresh框架實(shí)現(xiàn)ListView下拉刷新上拉加載更多
- Android 中RecyclerView頂部刷新實(shí)現(xiàn)詳解
- Android四種方式刷新View的操作方法
相關(guān)文章
Android-自定義控件之ListView下拉刷新的實(shí)現(xiàn)
本篇文章主要介紹了Android-自定義控件之ListView下拉刷新示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧2017-02-02
Android實(shí)現(xiàn)四級(jí)聯(lián)動(dòng)地址選擇器
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)四級(jí)聯(lián)動(dòng)地址選擇器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-10-10
Android ProgressDialog使用總結(jié)
ProgressDialog 繼承自AlertDialog,AlertDialog繼承自Dialog,實(shí)現(xiàn)DialogInterface接口,本文給大家介紹Android ProgressDialog使用總結(jié)的相關(guān)知識(shí),需要的朋友通過此文一起學(xué)習(xí)吧2016-01-01
Android互聯(lián)網(wǎng)訪問圖片并在客戶端顯示的方法
這篇文章主要介紹了Android互聯(lián)網(wǎng)訪問圖片并在客戶端顯示的方法,結(jié)合實(shí)例分析了Android處理圖片的技巧,并附帶了Android的URL封裝類,網(wǎng)絡(luò)連接封裝類與輸出流封裝類,需要的朋友可以參考下2015-12-12
android商品詳情頁(yè)面設(shè)計(jì)詳解
這篇文章主要為大家詳細(xì)介紹了android商品詳情頁(yè)面設(shè)計(jì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-12-12
Android AIDL實(shí)現(xiàn)進(jìn)程間通信探索
這篇文章主要為大家詳細(xì)介紹了Android AIDL實(shí)現(xiàn)進(jìn)程間通信的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-09-09

