Android(安卓)pulltorefresh上拉下拉刷新加载
16lz
2021-01-24
PullToRefresh是一套实现非常好的下拉刷新库,它支持:
ListView
ExpandableListView
GridView
WebView
ScrollView
HorizontalScrollView
ViewPager
等多种常用的需要刷新的View类型,而且使用起来也十分方便。
(GitHub地址:https://github.com/chrisbanes/Android-PullToRefresh)
- PullToRefresh基本用法:
1、在布局文件中添加PullToRefresh控件,比如PullToRefreshListView;
2、在Activity中,设置监听器OnRefreshListener以响应用户下拉操作;
3、在监听器的onRefresh()方法中执行数据刷新操作,可以通过AsyncTask或Handler来实现;
4、获取到数据后,记得调用onRefreshComplete()方法通知PullToRefresh控件数据已获取完毕,可以结束刷新操作。
二.使用PullToRefresh插件的简单示例
这里演示使用的是PullToRefreshScrollView。下拉时在最上面添加数据,上拉时在最下面添加数据。
(一)导入文件
1.下载PullToRefresh开发库
2.导入PullToRefresh开发库
下载后,解压到某个位置,Studio导入要求路径中不能有中文!
这里以AndroidStudio演示导入示例:
File–>New—>Import Module–>选择你解压后的开发包文件,如图:
选择路径后点击确定。
在Android项目中显示为:
3.依赖开发包
在项目的build.gradle中添加依赖
//加载工程项目包:下拉刷新上拉加载!
compile project(‘:pulltorefresh’)
也可以使用操作依赖
下面一个案例:
MainActivity主方法:
public class MainActivity extends AppCompatActivity { PullToRefreshScrollView ptrsl; ScrollListView slv; List list = new ArrayList<>();//ListView中的数据集合 ArrayAdapter adapter;//ListView的适配器 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ptrsl = (PullToRefreshScrollView) findViewById(R.id.ptrsl); slv = (ScrollListView) findViewById(R.id.slv); for (int i = 0; i < 2; i++) { list.add("" + i); } //适配器的视图使用Android系统自带的TextView布局 adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, android.R.id.text1, list); //给ListVIew设置适配器 slv.setAdapter(adapter); //给上拉加载下拉刷新控件设置监听对象 ptrsl.setOnRefreshListener(refresh); //设置可以上拉和下拉,否则默认支持的是下拉 ptrsl.setMode(PullToRefreshBase.Mode.BOTH); } /** * 刷新的监听对象 */ PullToRefreshBase.OnRefreshListener2 refresh = new PullToRefreshBase.OnRefreshListener2() { //在顶部时,。。。下拉刷新 @Override public void onPullDownToRefresh(PullToRefreshBase refreshView) { ptrsl.setRefreshing(); ptrsl.smoothScrollTo(-100);//设置拉出多长的距离才显示刷新效果 new Thread(new Runnable() { @Override public void run() { try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } handler.sendEmptyMessage(1);//发送Handler的what为1,代表下拉 } }).start(); } //在底部时,。。。上拉刷新 @Override public void onPullUpToRefresh(PullToRefreshBase refreshView) { ptrsl.setRefreshing(); ptrsl.smoothScrollTo(-100); new Thread(new Runnable() { @Override public void run() { try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } handler.sendEmptyMessage(2);//发送Handler的what为2,代表上拉 } }).start(); } }; //创建Hadler,数据数据并处理 Handler handler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); if (msg.what == 1) { list.add(0, "下拉刷新!");//把数据放在最前面 } else if (msg.what == 2) { list.add("上拉刷新!");//把数据放在最后面 } adapter.notifyDataSetChanged(); ptrsl.onRefreshComplete(); } };}
xml布局
<?xml version="1.0" encoding="utf-8"?><com.handmark.pulltorefresh.library.PullToRefreshScrollView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/ptrsl" tools:context="com.example.administrator.testdemo.MainActivity"> <com.example.administrator.testdemo.ScrollListView android:id="@+id/slv" android:layout_width="match_parent" android:layout_height="match_parent" />com.handmark.pulltorefresh.library.PullToRefreshScrollView>
自定义的ScrollListView
public class ScrollListView extends ListView { public ScrollListView(Context context) { super(context); } public ScrollListView(Context context, AttributeSet attrs) { super(context, attrs); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int height = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST); super.onMeasure(widthMeasureSpec, height); }}
总体来说用起来还是很容易的 程序中下拉时,上面显示的界面的提示也是可以自定义的。对下载的库文件里面的src中的layout的文件pull_to_refresh_header_vertical.xml文件进行修改就可以了。
更多相关文章
- Android使用LocalSocket抓取数据
- Android(安卓)使用 AIDL 实现进程间通信,使用基本类型作为输入和
- android 简单文件管理器的实现
- android使用文件进行存储
- android 反编译工具
- Android(安卓)布局之GridLayout
- Day03
- android 上面js java数据互传
- android之switch控件的用法