Android中三种简便的拉动刷新方式
来源:互联网 发布:网络兼职打字录入员 编辑:程序博客网 时间:2024/06/10 06:01
最近学习了几种拉动刷新的方式,分别是SwipeRefreshLayout,PullToRefresh,UtraPtr三种。下面来看下这几种的使用方式。
SwiperefreshLayout:(google提供的,在v4包下)
Xml文件:
<RelativeLayout 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" tools:context="com.example.administrator.swiperefreshlayout.MainActivity"> <android.support.v4.widget.SwipeRefreshLayout android:layout_width="match_parent" android:id="@+id/swiperefreshlayout" android:layout_height="match_parent"> <ListView android:layout_width="match_parent" android:id="@+id/listview" android:layout_height="match_parent"></ListView> </android.support.v4.widget.SwipeRefreshLayout></RelativeLayout>
Activity:
package com.example.administrator.swiperefreshlayout;import android.os.Bundle;import android.support.v4.widget.SwipeRefreshLayout;import android.support.v7.app.AppCompatActivity;import android.widget.ArrayAdapter;import android.widget.ListView;import java.util.ArrayList;import java.util.List;public class MainActivity extends AppCompatActivity { private ListView listview; private SwipeRefreshLayout swiperefresh; private List<String> list; private ArrayAdapter<String> adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); listview = ((ListView) findViewById(R.id.listview)); swiperefresh = ((SwipeRefreshLayout) findViewById(R.id.swiperefreshlayout)); initDatas(); adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, list); listview.setAdapter(adapter); swiperefresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { @Override public void onRefresh() { list.add(0,"addBigname"); adapter.notifyDataSetChanged(); swiperefresh.setRefreshing(false); } }); } private void initDatas() { list = new ArrayList<>(); for (int i = 0; i < 30; i++) { list.add("bigname" + i); } }}这个的用法是超简单的。只需要吧刷新的逻辑在onReFresh()方法中实现就可以了,只支持下拉的刷新。
PullToRefreash: 这属于第三方库,所以需要导包。
(下载地址:https://github.com/chrisbanes/Android-PullToRefresh )
把它下载下来之后解压打开注意其中的 library 文件夹,我们需要的就是这个库。
这里顺便把导包的步骤写一下,因为自己对导包这一块也是一直感觉怕怕的,
导包步骤:
①new->import module->找到刚刚说的library->finish
②检查你自己的gradle文件与library包中的gradle文件中的compileSdkVersion,以及buildToolsVersion,
compileSdkVersion 24buildToolsVersion "24.0.2"把两者改为一致的即可。
③如果提示下面这句代码中的floor爆红的话,那就把FloatMath改为Math。
float exactContentHeight = FloatMath.floor(mRefreshableView.getContentHeight() * mRefreshableView.getScale());
④最后别忘了将app依赖该library。那导包的工作就到这完成啦!接下来看代码
XML文件:
<?xml version="1.0" encoding="utf-8"?><RelativeLayout 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" tools:context="com.example.administrator.pulltorefresh12.MainActivity"> <com.handmark.pulltorefresh.library.PullToRefreshListView android:layout_width="match_parent" android:id="@+id/refresh_listview" android:layout_height="match_parent" /></RelativeLayout>留意:这里直接就是一个控件
Activity:
package com.example.administrator.pulltorefresh12;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.widget.ArrayAdapter;import android.widget.ListView;import com.handmark.pulltorefresh.library.PullToRefreshBase;import com.handmark.pulltorefresh.library.PullToRefreshListView;import java.util.ArrayList;import java.util.List;public class MainActivity extends AppCompatActivity { private PullToRefreshListView refresh_listview; private List<String> list; private ArrayAdapter<String> adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); refresh_listview = ((PullToRefreshListView) findViewById(R.id.refresh_listview)); initDatas(); adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, list); refresh_listview.setAdapter(adapter); refresh_listview.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() { //下拉时回调 @Override public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) { list.add(0, "下拉数据"); adapter.notifyDataSetChanged(); startThread(); } //上拉时回调 @Override public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) { list.add(0, "上拉数据"); adapter.notifyDataSetChanged(); refresh_listview.setRefreshing(false); startThread(); } }); } private void startThread() { new Thread(new Runnable() { @Override public void run() { try { Thread.sleep(1000); runOnUiThread(new Runnable() { @Override public void run() { refresh_listview.onRefreshComplete();//停止刷新动画 } }); } catch (InterruptedException e) { e.printStackTrace(); } } }).start(); } private void initDatas() { list = new ArrayList<>(); for (int i = 0; i < 30; i++) { list.add("bigname" + i); } }}注意一个问题:上拉下拉中是不能够马上执行停止刷新动画的,这样做的刷新效果一直在那,不会收上去,所以我像上面这样等待了一会再去收回刷新画面。
这个是支持上拉和下拉刷新的。
当然刷新显示的字体什么的是可以自定义的,需要的自己查阅一下吧。
UltraPtr:
最后一刷新方式了,同样是第三方库的。所以继续还是导包导包导包。
下载地址:https://github.com/liaohuqiu/android-Ultra-Pull-To-Refresh
liaohuqiu,大神写出来的,好生羡慕^_^。
下载好解压之后留意其中的ptr-demo,ptr-lib两个文件夹,demo是大神给我们的案例,想看的可以去看下大神们是怎么说的,而lib是我们需要导入的库了。
按照上面说的方式导好包就ok了,过程中会报错,解决的办法还是那样,对应的gradle要一致。
XML文件:
<?xml version="1.0" encoding="utf-8"?><RelativeLayout 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" tools:context="com.example.administrator.ultraptr20.MainActivity"> <in.srain.cube.views.ptr.PtrFrameLayout android:id="@+id/ptrframelayout" android:layout_height="match_parent" android:layout_width="match_parent"> <ListView android:layout_width="match_parent" android:id="@+id/listview" android:layout_height="match_parent"></ListView> </in.srain.cube.views.ptr.PtrFrameLayout></RelativeLayout>
package com.example.administrator.ultraptr20;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.widget.ArrayAdapter;import android.widget.ListView;import java.util.ArrayList;import java.util.List;import in.srain.cube.views.ptr.PtrClassicDefaultHeader;import in.srain.cube.views.ptr.PtrDefaultHandler;import in.srain.cube.views.ptr.PtrFrameLayout;import in.srain.cube.views.ptr.header.MaterialHeader;import in.srain.cube.views.ptr.header.StoreHouseHeader;public class MainActivity extends AppCompatActivity { private PtrFrameLayout ptr; private ListView listview; private List<String> list; private ArrayAdapter adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ptr = ((PtrFrameLayout) findViewById(R.id.ptrframelayout)); listview = ((ListView) findViewById(R.id.listview)); initDatas(); listview.setAdapter(adapter); //有几种刷新的样式,// setPtrClassicDefaultHeader();//经典的样式// setStoreHouseHeader();//文字闪烁样式 setMaterialHeader();//MD样式 ptr.setPtrHandler(new PtrDefaultHandler() { @Override public void onRefreshBegin(PtrFrameLayout frame) { list.add(0, "上拉数据"); adapter.notifyDataSetChanged(); ptr.refreshComplete(); } }); } private void initDatas() { list = new ArrayList<>(); for (int i = 0; i < 30; i++) { list.add("bigname" + i); } adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, list); } private void setPtrClassicDefaultHeader() { PtrClassicDefaultHeader header = new PtrClassicDefaultHeader(this); ptr.setHeaderView(header); ptr.addPtrUIHandler(header);//让头布局的状态和下拉刷新状态保持一致 } private void setMaterialHeader() { MaterialHeader header = new MaterialHeader(this); ptr.setHeaderView(header); ptr.addPtrUIHandler(header); } private void setStoreHouseHeader() { StoreHouseHeader header = new StoreHouseHeader(this); header.initWithString("loading...");//不支持中文 ptr.setHeaderView(header); ptr.addPtrUIHandler(header); }}
还有认识一种刷新的样式,个人认为挺好看的,直接把下面这句添加到gradler的依赖中也是可以的。这个就不写出来了。
compile 'org.ptrheader.library:ultra-ptr-headers:0.3.0'
总的来说这三种拉动刷新的方式都是有很多很多共同点的,使用起来也很简单,需要注意的几点:
1.如果你在onRefrash()方法中执行refreashConplete()方法如果没效果的话就应该考虑开个子线程等待一下下再去调用。
2.UltraPtr是要setHeaderView()来添加刷新的样式,同时addPtrUIHander()来将添加的样式与刷新的状态保持一致。
3.PullToRefreash是支持上下刷新,而其他两种只有向下刷新。
0 0
- Android中三种简便的拉动刷新方式
- Android List拉动刷新
- iscroll5 上下拉动刷新
- Iscroll5-上下拉动刷新
- 侧拉加上下拉动刷新
- 下拉刷新--随着拉动距离的变化,给图片染色
- android view 的刷新方式
- Xlistview实现上下拉动刷新
- Android简便通用的SimpleBaseAdapter
- Android简便通用的SimpleBaseAdapter
- Android简便通用的SimpleBaseAdapter
- Android简便通用的SimpleBaseAdapter
- Android简便通用的SimpleBaseAdapter
- Android简便通用的SimpleBaseAdapter
- Android简便通用的simpleBaseAdapter
- Android RecyclerView的简便写法
- 一个强大的拉动刷新开源项目,支持各种控件下拉刷新
- 最简便的方式使用多线程
- mysql 排序 排名
- 创建画布并画一个圆
- HashMap原理
- 关于在tcp或udp上搭载私有协议
- slam资料整理
- Android中三种简便的拉动刷新方式
- css 动画
- Oracle 游标使用全解
- Android4.2.2 SurfaceFlinger本地的FramebufferSurface实现真正的显示
- Ubuntu环境下挂载新硬盘
- Web前端从入门到放弃(js数组基础和数组方法的各种使用)
- maven聚合工程的创建和聚合工程的打包
- 数据结构之前言
- 237. Delete Node in a Linked List