前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >android使用SwipeRefreshLayout实现ListView下拉刷新上拉加载

android使用SwipeRefreshLayout实现ListView下拉刷新上拉加载

作者头像
砸漏
发布2020-10-26 22:30:39
2K0
发布2020-10-26 22:30:39
举报
文章被收录于专栏:恩蓝脚本恩蓝脚本

本文实例为大家分享了android实现ListView下拉刷新上拉加载的具体代码,供大家参考,具体内容如下

这次使用的是系统的SwipeRefreshLayout实现下拉刷新,和设置ListView的滑动监听判断是否滑动到最底部然后加载更多; 这个要比PullToRefreshListView简单很多,想PullToRefreshListView实现下拉刷新上拉加载的可以看这篇博客: android使用PullToRefresh框架实现ListView下拉刷新上拉加载更多

至于使用哪一种大家可以根据产品的需求选择,这两种刷新目前为止世面上还是使用PullToRefreshListView的比较多;

首先说下SwipeRefreshLayout的五个方法:

1、setOnRefreshListener():设置手势滑动监听器。 2、setProgressBackgroundColor():设置进度圈的背景色。 3、setColorSchemeResources():设置进度动画的颜色。 4、setRefreshing():设置组件的刷洗状态。 5、setSize():设置进度圈的大小

这个大家简单了解一下,下面代码中都一一用到;

首先说下布局文件,如果想用SwipeRefreshLayout实现下拉刷新必须把ListView写到SwipeRefreshLayout布局里面;

代码语言:javascript
复制
<?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所以下拉的时候直接发送一个延时1秒的handler,然后添加数据刷新adapter; 上拉加载更多的时候直接给ListVIew设置了一个滑动监听,判断是否滑动到adapter的最下面,然后加载数据,刷新adapter;

代码语言:javascript
复制
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); 
//设置进度圈的大小;(这里面只有两个值SwipeRefreshLayout.LARGE和DEFAULT,后者是默认效果) 
swipeRefreshLayout.setSize(SwipeRefreshLayout.LARGE); 
//设置进度圈的背景色。这里随便给他设置了一个颜色:浅绿色 
swipeRefreshLayout.setProgressBackgroundColorSchemeColor(Color.CYAN); 
//设置进度动画的颜色。这里面最多可以指定四个颜色,我这也是随机设置的,大家知道怎么用就可以了 
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); 
//设置手势滑动监听器 
swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { 
public void onRefresh() { 
//发送一个延时1秒的handler信息 
handler.sendEmptyMessageDelayed(199,1000); 
} 
}); 
//给listview设置一个滑动的监听 
mListView.setOnScrollListener(new AbsListView.OnScrollListener() { 
//当滑动状态发生改变的时候执行 
public void onScrollStateChanged(AbsListView view, int scrollState) { 
switch (scrollState){ 
//当不滚动的时候 
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; 
} 
} 
//正在滑动的时候执行 
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,"英雄联盟"); 
adapter.notifyDataSetChanged(); 
//设置组件的刷洗状态;false代表关闭 
swipeRefreshLayout.setRefreshing(false); 
} 
} 
}; 
} 

这里面为了给大家演示SwipeRefreshLayout的几个方法,如果全部使用默认可以把setProgressBackgroundColor():setColorSchemeResources():setSize():这三个方法去掉。 这样代码会更少,默认效果也非常不错,这个看大家需求。

源码下载地址

以上就是本文的全部内容,希望对大家的学习有所帮助。

本文参与?腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-09-11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客?前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com