Android开源--PullToRefresh
开源地址: https://github.com/chrisbanes/Android-PullToRefresh
简单介绍:PullToRefresh是一款支持ListView,GridView,ViewPager,ScrollView,WebView等一切能够拖动,并实现上下左右拖动刷新数据的框架,废话不多说,上代码;
[主要的android依赖项目存放在library中,支持fragment列表,ViewPager列表的存放在extras包中]
[依赖项目导入如左图]
1.支持ListView的实现:
1)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" >
- <com.handmark.pulltorefresh.library.PullToRefreshListView
- android:id="@+id/my_ptr_lv"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:cacheColorHint="#0000"
- android:divider="#0FF"
- android:dividerHeight="1dp"
- android:smoothScrollbar="true"
- android:fastScrollEnabled="false"
- android:footerDividersEnabled="false"
- android:headerDividersEnabled="false" />
- </RelativeLayout>
2)JAVA代码
- public class PullListSampleActivity extends Activity {
- private PullToRefreshListView mPullToRefreshLv;
- private ArrayAdapter<String> mAdapter;
- private LinkedList<String> mListItems;
- private String[] mStrings = { "Abbaye de Belloc", "Abbaye du Mont des Cats", "Abertam", "Abondance", "Ackawi",
- "Acorn", "Adelost", "Affidelice au Chablis", "Afuega'l Pitu", "Airag", "Airedale", "Aisy Cendre",
- "Allgauer Emmentaler", "Abbaye de Belloc", "Abbaye du Mont des Cats", "Abertam", "Abondance", "Ackawi",
- "Acorn", "Adelost", "Affidelice au Chablis", "Afuega'l Pitu", "Airag", "Airedale", "Aisy Cendre",
- "Allgauer Emmentaler" };
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_pull_list_sample);
- //填充数据
- mPullToRefreshLv=(PullToRefreshListView) findViewById(R.id.my_ptr_lv);
- mListItems=new LinkedList<String>(Arrays.asList(mStrings));
- mAdapter=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,android.R.id.text1,mListItems);
- mPullToRefreshLv.setAdapter(mAdapter);
- //下拉刷新的声音支持
- SoundPullEventListener<ListView> soundPullEventListener=new SoundPullEventListener<ListView>(this);
- soundPullEventListener.addSoundEvent(State.PULL_TO_REFRESH, R.raw.pull_event);
- soundPullEventListener.addSoundEvent(State.REFRESHING, R.raw.refreshing_sound);
- soundPullEventListener.addSoundEvent(State.RESET, R.raw.reset_sound);
- mPullToRefreshLv.setOnPullEventListener(soundPullEventListener);
- //刷新时调用的监听器
- mPullToRefreshLv.setOnRefreshListener(new OnRefreshListener<ListView>() {
- @Override
- public void onRefresh(PullToRefreshBase<ListView> refreshView) {
- String label=DateUtils.formatDateTime(PullListSampleActivity.this, System.currentTimeMillis(),
- DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_ABBREV_ALL);
- //设置头部Label
- mPullToRefreshLv.getLoadingLayoutProxy().setLastUpdatedLabel(label);
- new GetListDataTask().execute();
- }
- });
- mPullToRefreshLv.setOnLastItemVisibleListener(new OnLastItemVisibleListener() {
- @Override
- public void onLastItemVisible() {
- Toast.makeText(PullListSampleActivity.this,"all data loaded !", 800).show();
- }
- });
- }
- class GetListDataTask extends AsyncTask<Void, Void, String[]>{
- @Override
- protected String[] doInBackground(Void... params) {
- //mock get datas
- try {
- Thread.sleep(3000);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- return mStrings;
- }
- @Override
- protected void onPostExecute(String[] result) {
- mListItems.addAll(Arrays.asList(result));
- mAdapter.notifyDataSetChanged();
- //手动关闭头部
- mPullToRefreshLv.onRefreshComplete();
- super.onPostExecute(result);
- }
- }
- }
2.支持GridView
1)XML实现
ptr:ptrMode="both"表示上下/左右都能够刷新
ptr:ptrDrawable表示刷新时显示的图标
- <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" >
- <com.handmark.pulltorefresh.library.PullToRefreshGridView
- xmlns:ptr="http://schemas.android.com/apk/res-auto"
- android:id="@+id/my_ptr_gv"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:cacheColorHint="#0000"
- android:divider="#0FF"
- android:dividerHeight="1dp"
- android:smoothScrollbar="true"
- android:fastScrollEnabled="false"
- android:footerDividersEnabled="false"
- android:headerDividersEnabled="false"
- android:numColumns="auto_fit"
- ptr:ptrMode="both"
- ptr:ptrDrawable="@drawable/default_ptr_rotate" />
- </RelativeLayout>
2)JAVA代码实现
- public class PullGridSampleActivity extends Activity {
- private PullToRefreshGridView mPullToRefreshGridView;
- private ArrayAdapter<String> mAdapter;
- private LinkedList<String> mListItems;
- private String[] mStrings = { "Abbaye de Belloc", "Abbaye du Mont des Cats", "Abertam", "Abondance", "Ackawi",
- "Acorn", "Adelost", "Affidelice au Chablis", "Afuega'l Pitu", "Airag", "Airedale", "Aisy Cendre",
- "Allgauer Emmentaler" };
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_pull_grid_sample);
- mPullToRefreshGridView=(PullToRefreshGridView) findViewById(R.id.my_ptr_gv);
- mListItems=new LinkedList<String>();
- mAdapter=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,
- android.R.id.text1,mListItems);
- mPullToRefreshGridView.setAdapter(mAdapter);
- //支持当没有数据的时候替代的View 详细代码依据自己的业务
- TextView textView=new TextView(this);
- LayoutParams params=new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT);
- params.gravity=Gravity.CENTER;
- textView.setLayoutParams(params);
- textView.setText("The data is empty !");
- mPullToRefreshGridView.setEmptyView(textView);
- SoundPullEventListener<GridView> pullEventListener=new SoundPullEventListener<GridView>(this);
- pullEventListener.addSoundEvent(State.PULL_TO_REFRESH,R.raw.pull_event);
- pullEventListener.addSoundEvent(State.RESET,R.raw.reset_sound);
- pullEventListener.addSoundEvent(State.REFRESHING,R.raw.refreshing_sound);
- mPullToRefreshGridView.setOnPullEventListener(pullEventListener);
- mPullToRefreshGridView.setOnRefreshListener(new OnRefreshListener2<GridView>() {
- @Override
- public void onPullDownToRefresh(
- PullToRefreshBase<GridView> refreshView) {
- String label=DateUtils.formatDateTime(getApplicationContext(),
- System.currentTimeMillis(),DateUtils.FORMAT_24HOUR);
- refreshView.getLoadingLayoutProxy().setLastUpdatedLabel(label);
- new GetDataTask().execute();
- }
- @Override
- public void onPullUpToRefresh(
- PullToRefreshBase<GridView> refreshView) {
- String label=DateUtils.formatDateTime(getApplicationContext(),
- System.currentTimeMillis(),DateUtils.FORMAT_24HOUR);
- refreshView.getLoadingLayoutProxy().setLastUpdatedLabel(label);
- new GetDataTask().execute();
- }
- });
- }
- class GetDataTask extends AsyncTask<Void, Void, String[]>{
- @Override
- protected String[] doInBackground(Void... params) {
- try {
- Thread.sleep(2000);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- return mStrings;
- }
- @Override
- protected void onPostExecute(String[] result) {
- mListItems.addAll(Arrays.asList(result));
- mAdapter.notifyDataSetChanged();
- mPullToRefreshGridView.onRefreshComplete();
- }
- }
- }
3.对ViewPager的实现
1)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" >
- <com.handmark.pulltorefresh.extras.viewpager.PullToRefreshViewPager
- xmlns:ptr="http://schemas.android.com/apk/res-auto"
- android:id="@+id/my_ptr_viewpager"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- ptr:ptrAnimationStyle="flip"
- ptr:ptrMode="both"
- ptr:ptrHeaderBackground="#FFFF" />
- </RelativeLayout>
2)Java实现
- public class PullViewPagerSample extends Activity implements OnRefreshListener<ViewPager>{
- private PullToRefreshViewPager mPullToRefreshViewPager;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_pull_viewpager_sample);
- mPullToRefreshViewPager=(PullToRefreshViewPager) findViewById(R.id.my_ptr_viewpager);
- mPullToRefreshViewPager.getRefreshableView().setAdapter(new MyPagerAdapter());
- mPullToRefreshViewPager.setOnRefreshListener(this);
- }
- class MyPagerAdapter extends PagerAdapter{
- private final int[] sDrawables = { R.drawable.wallpaper, R.drawable.wallpaper, R.drawable.wallpaper,
- R.drawable.wallpaper, R.drawable.wallpaper, R.drawable.wallpaper };
- @Override
- public int getCount() {
- return sDrawables.length;
- }
- @Override
- public Object instantiateItem(ViewGroup container, int position) {
- ImageView imageView=new ImageView(container.getContext());
- imageView.setImageResource(sDrawables[position]);
- container.addView(imageView,LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT);
- return imageView;
- }
- @Override
- public boolean isViewFromObject(View arg0, Object arg1) {
- return arg0==(View)arg1;
- }
- @Override
- public void destroyItem(ViewGroup container, int position, Object object) {
- container.removeView((View) object);
- }
- }
- @Override
- public void onRefresh(PullToRefreshBase<ViewPager> refreshView) {
- try {
- Thread.sleep(4000);//模拟载入时间
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- mPullToRefreshViewPager.onRefreshComplete();
- }
- }
Android开源--PullToRefresh的更多相关文章
- Android开源项目pulltorefresh分析与简单使用
在Android开发中有时我们须要訪问网络实时刷新数据.比方QQ好友在线状态最新信息,QQ空间须要显示很多其它的好友动态信息,EOE论坛client显示很多其它的文章帖子信息等.android-pul ...
- 2015-2016最火的Android开源项目--github开源项目集锦(不看你就out了)
标签: Android开发开源项目最火Android项目github 2015-2016最火的Android开源项目 本文整理与集结了近期github上使用最广泛最火热与最流行的开源项目,想要充电与提 ...
- Android开源项目分类汇总
目前包括: Android开源项目第一篇——个性化控件(View)篇 包括ListView.ActionBar.Menu.ViewPager.Gallery.GridView.ImageView. ...
- 59.Android开源项目及库 (转)
转载 : https://github.com/Tim9Liu9/TimLiu-Android?hmsr=toutiao.io&utm_medium=toutiao.io&utm_so ...
- Android 开源项目分类汇总(转)
Android 开源项目分类汇总(转) ## 第一部分 个性化控件(View)主要介绍那些不错个性化的 View,包括 ListView.ActionBar.Menu.ViewPager.Galler ...
- Android 开源项目分类汇总
Android 开源项目分类汇总 Android 开源项目第一篇——个性化控件(View)篇 包括ListView.ActionBar.Menu.ViewPager.Gallery.GridView ...
- Android开源项目及库搜集
TimLiu-Android 自己总结的Android开源项目及库. github排名 https://github.com/trending,github搜索:https://github.com/ ...
- material design 的android开源代码整理
material design 的android开源代码整理 1 android (material design 效果的代码库) 地址请点击:MaterialDesignLibrary 效果: 2 ...
- Android开源项目库汇总
最近做了一个Android开源项目库汇总,里面集合了OpenDigg 上的优质的Android开源项目库,方便移动开发人员便捷的找到自己需要的项目工具等,感兴趣的可以到GitHub上给个star. 抽 ...
随机推荐
- android 使用 LocalStorage
PS:本身是.net 出身 因为项目需要 研究了好几天安卓 这个方法网上也有 自己也写出来 有时间自己看看 和 给还没有解决问题的朋友借鉴下,下面有标个重点 是允许使用localstorage 的关键 ...
- J.U.C并发框架源码阅读(十)ConcurrentLinkedQueue
基于版本jdk1.7.0_80 java.util.concurrent.ConcurrentLinkedQueue 代码如下 /* * ORACLE PROPRIETARY/CONFIDENTIAL ...
- vi / vim 设置
一.vi下方向键输入后,出现ABCD,解决方法: 在vi中输入:set nocp 按回车即可. 二.设置TAB缩进4个空格: 为了vim更好的支持python写代码,修改tab默认4个空格有两种设置方 ...
- 51nod 1095 Anigram单词【hash/map/排序/字典树】
1095 Anigram单词 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题 收藏 关注 一个单词a如果通过交换单词中字母的顺序可以得到另外的单词b,那么定义b ...
- JSONP 安全攻防技术(JSON劫持、 XSS漏洞)
关于 JSONP JSONP 全称是 JSON with Padding ,是基于 JSON 格式的为解决跨域请求资源而产生的解决方案.他实现的基本原理是利用了 HTML 里 <script&g ...
- MySQL索引,MySQL性能分析及explain的使用,分析SQL查询性能
可以使用explain来分析MySQL查询性能,举例如下: 1.使用explain语句去查看分析结果 如 explain select * from test1 where id=1; 会出现: id ...
- linux之ls指令的关键字过滤显示
假设~/admin的文件夹下面有几个文件: a.pm b.pm c.pl d.pl e.pml 想只显示.pm结尾的可以用: ls *.pm 或者 ls | grep .pm,两者等价. 想显示b.开 ...
- ubifs & mtd
前天晚上在写完另一篇总结之时,赵XX向我咨询了关于mtd 和ubifs的相关内容.而我在这方面只是略懂皮毛,所以向他许愿共同调查这个方面的知识.经过昨天一天的调查,最后感觉是有了一定的经验和基础了,所 ...
- 【mybatis】mybatis中 的# 和 $的区别
mybatis中 的# 和 $的区别 参考地址:https://www.cnblogs.com/sxdcgaq8080/p/10869144.html
- 高并发下的Node.js与负载均衡
新兴的Node.js已经吸引了很多开发人员的眼光,它提供给我们一个快速构建高性能的网络应用的平台.我也开始逐步投入node.js的怀抱,在学习和使用的过程中,遇到了一些问题,也有一些经验,我觉得有必要 ...