1:在布局中添加SwipeRefreshLayout和Listview组件

[html] view
plain
 copy

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <RelativeLayout
  3. style="@style/BaseStyle.White"
  4. xmlns:android="http://schemas.android.com/apk/res/android">
  5. <!--下拉刷新-->
  6. <android.support.v4.widget.SwipeRefreshLayout
  7. android:id="@+id/srl_refresh"
  8. style="@style/BaseStyle">
  9. <!--上拉更多-->
  10. <ListView
  11. android:id="@+id/lv_person_goods"
  12. style="@style/BaseStyle"
  13. android:gravity="center"
  14. android:horizontalSpacing="@dimen/margin_standard"
  15. android:numColumns="2"
  16. android:scrollbarStyle="outsideOverlay"
  17. android:verticalSpacing="@dimen/margin_standard"/>
  18. </android.support.v4.widget.SwipeRefreshLayout>
  19. <!--数据为空时显示的View-->
  20. <TextView
  21. android:id="@+id/tv_no_data"
  22. style="@style/BaseStyle.FullWrap"
  23. android:layout_marginTop="@dimen/textview_width_small"
  24. android:gravity="center_horizontal"
  25. android:text="暂无数据"
  26. android:textColor="@color/text_title_standard"
  27. android:textSize="@dimen/font_size_small"
  28. android:visibility="gone"/>
  29. </RelativeLayout>

2:在主页面使用

[java] view
plain
 copy

  1. /**
  2. * Created by pengkv on 2014/12/5.
  3. * 我的宝贝列表页面,用于选择添加到拍卖场
  4. */
  5. public class MySaleGoodsListViewActivity extends VolleyActivity implements IInit, IResponseHandler, IPagination, SwipeRefreshLayout.OnRefreshListener {
  6. private int auctionID;
  7. private GoodsInfoViewModel mViewModel;
  8. private TextView mEmptyTV;//空白视图
  9. private ListView mListView;//专场列表
  10. private PersonGoodsListAdapter mAdapter;//适配器
  11. private SwipeRefreshLayout mSwipeRefreshLayout;//下拉刷新布局
  12. @Override
  13. protected void onCreate(Bundle savedInstanceState) {
  14. super.onCreate(savedInstanceState);
  15. setContentView(R.layout.activity_me_auction_goods_list);
  16. init();
  17. }
  18. @Override
  19. public void init() {
  20. ActionBarUtil.setup(this, "我店铺的宝贝");
  21. auctionID = getIntent().getIntExtra(EnumIntentKey.AUCTION_ID.toString(), 0);
  22. mListView = (ListView) findViewById(R.id.lv_person_goods);
  23. mEmptyTV = (TextView) findViewById(R.id.tv_no_data);
  24. mSwipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.srl_refresh);//下拉刷新组件
  25. mSwipeRefreshLayout.setOnRefreshListener(this);//设置刷新监听器
  26. mSwipeRefreshLayout.setColorSchemeResources(R.color.background_blue_standard, R.color.white, R.color.background_blue_standard, R.color.white);//设置下拉刷新组件的颜色
  27. mViewModel = new GoodsInfoViewModel();
  28. fetchData(FIRST);//得到喜欢列表数据
  29. }
  30. @Override
  31. public void fetchData(int tag) {
  32. GetGoodsListForSellParam param = new GetGoodsListForSellParam(Data.getUserID(), 1, mViewModel.getPageIndex(), Data.PAGE_SIZE_MEDIUM);
  33. SquareApi.getGoodsListForSell(this, param, tag);
  34. }
  35. /**
  36. * 更新适配器
  37. */
  38. @Override
  39. protected void onRestart() {
  40. super.onRestart();
  41. mViewModel.reset();
  42. fetchData(FIRST);//得到喜欢列表数据
  43. }
  44. @Override
  45. public void updateUI(Object response, final int tag) {
  46. if (response == null) return;
  47. if (tag == FIRST) {
  48. //得到喜欢列表数据
  49. mViewModel.inflate(response);
  50. //通过判断喜欢列表适配器mAdapter是否为空来做分页处理
  51. if (mAdapter == null) {
  52. //当适配器为空
  53. mSwipeRefreshLayout.setRefreshing(false);//下拉刷新组件停止刷新
  54. mAdapter = new PersonGoodsListAdapter(this, mViewModel.getList());
  55. mListView.setAdapter(mAdapter);//ListView绑定喜欢适配器
  56. /**
  57. *  上拉更多
  58. */
  59. mListView.setOnScrollListener(new AbsListView.OnScrollListener() {
  60. @Override
  61. public void onScrollStateChanged(AbsListView view, int scrollState) {
  62. switch (scrollState) {
  63. case SCROLL_STATE_IDLE:
  64. if (mListView.getLastVisiblePosition() == mViewModel.getList().size() - 1) {
  65. if (!mViewModel.isComplete()) {
  66. fetchNewData(FIRST);
  67. }
  68. }
  69. break;
  70. }
  71. }
  72. @Override
  73. public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
  74. }
  75. });
  76. mListView.setEmptyView(mEmptyTV);//将此图片绑定到喜欢列表ListView
  77. } else {
  78. mAdapter.notifyDataSetChanged();//适配器更新数据
  79. }
  80. mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
  81. @Override
  82. public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
  83. Intent i = new Intent();
  84. if (getIntent().getBooleanExtra(EnumIntentKey.IS_SELECT_LINK.toString(), false)) { // 选择发送链接
  85. i.putExtra(EnumIntentKey.GOODS_ID.toString(), mViewModel.getList().get(position).getGoodsID());
  86. i.putExtra(EnumIntentKey.GOODS_NAME.toString(), mViewModel.getList().get(position).getGoodsName());
  87. setResult(RESULT_OK, i);
  88. } else {  // 添加到专场
  89. i.setClass(MySaleGoodsListViewActivity.this, AddAuctionGoodsActivity.class);
  90. i.putExtra(EnumIntentKey.AUCTION_GOODS_ID.toString(), mViewModel.getList().get(position).getGoodsID());
  91. i.putExtra(EnumIntentKey.IS_DO.toString(), true);
  92. i.putExtra(EnumIntentKey.AUCTION_ID.toString(), auctionID);
  93. startActivity(i);
  94. }
  95. finish();
  96. }
  97. });
  98. }
  99. }
  100. @Override
  101. public void fetchNewData(int tag) {
  102. mViewModel.increasePageIndex();
  103. fetchData(FIRST);//得到喜欢的拍品列表数据
  104. }
  105. @Override
  106. public void onRefresh() {
  107. mViewModel.reset();//重置页索引和完成状态
  108. mAdapter = null;//清空适配器
  109. fetchData(FIRST);//得到喜欢的拍品列表数据
  110. }
  111. }

解析:

(下拉刷新)主页面需要实现SwipeRefreshLayout.OnRefreshListener接口,然后在

[java] view
plain
 copy

  1. @Override
  2. public void onRefresh() {
  3. }

方法中实现更新

(上拉更多)上拉更多需要监听setOnScrollListener()方法

[java] view
plain
 copy

  1. mListView.setOnScrollListener(new AbsListView.OnScrollListener() {
  2. @Override
  3. public void onScrollStateChanged(AbsListView view, int scrollState) {
  4. switch (scrollState) {
  5. case SCROLL_STATE_IDLE:
  6. if (mListView.getLastVisiblePosition() == mViewModel.getList().size() - 1) {
  7. if (!mViewModel.isComplete()) {
  8. fetchNewData(FIRST);
  9. }
  10. }
  11. break;
  12. }
  13. }
  14. @Override
  15. public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
  16. }
  17. });

SwipeRefreshLayout实现上拉下拉刷新的更多相关文章

  1. 练习使用XRecyclerView,可上拉下拉刷新。

    package com.lixu.testxrecyclerview; import android.support.v7.app.AppCompatActivity; import android. ...

  2. iOS不得姐项目--推荐关注模块(一个控制器控制两个tableView),数据重复请求的问题,分页数据的加载,上拉下拉刷新(MJRefresh)

    一.推荐关注模块(一个控制器控制两个tableView) -- 数据的显示 刚开始加载数据值得注意的有以下几点 导航控制器会自动调整scrollView的contentInset,最好是取消系统的设置 ...

  3. 解决iscroll.js上拉下拉刷新手指划出屏幕页面无法回弹问题

    博客已迁移至http://zlwis.me. 使用过iscroll.js的上拉下拉刷新效果的朋友应该都碰到过这个问题:在iOS的浏览器中,上拉或下拉刷新时,当手指划出屏幕后,页面无法弹回.很多人因为解 ...

  4. swift实现UItableview上拉下拉刷新模块

    最近用写个项目 发现上拉下拉刷新模块没找到合适的 so 自己写了一个 由于最近忙 教程就不写了 里面有 直接贴地址https://github.com/DaChengTechnology/DCRefr ...

  5. 打造android万能上拉下拉刷新框架——XRefreshView (二)

    打造Android万能上拉下拉刷新框架--XRefreshView(一) 打造Android万能上拉下拉刷新框架--XRefreshView(三) 一.前言 自从上次发表了打造android万能上拉下 ...

  6. 打造Android万能上拉下拉刷新框架--XRefreshView(三)

    转载请注明出处:http://blog.csdn.net/footballclub/ 打造Android万能上拉下拉刷新框架–XRefreshView(一) 打造Android万能上拉下拉刷新框架–X ...

  7. ListView实现上拉下拉刷新加载功能

    第一步.首先在你项目中创建一个包存放支持下拉刷新和上拉加载的类:

  8. iOS 上拉下拉刷新简单实现代码

    一般说到上拉刷新下拉刷新,很多人可能想到的是一个第三方开源框架EGORefresh,下面说下,如何自己写代码实现. UITableView本身是一个UIScrollView,所以UITableView ...

  9. 【PullToRefresh 系列基本用法】 Android装上拉下拉刷新控制具体的解释

    转载请注明:http://blog.csdn.net/duguang77/article/details/40921601 作者信息: Chris Banes大神详情:https://github.c ...

随机推荐

  1. [BBS]搭建开源论坛之JForum安装使用札记

    本文作者:sushengmiyan 本文地址:http://blog.csdn.net/sushengmiyan/article/details/47761303 目录 目录 BBS搭建开源论坛之JF ...

  2. Android-Chart

    MPAndroidChart 包括折线图.曲线图.柱形图.饼图.K线图等等 我的地址:https://github.com/kongqw/MPAndroidChart 开源地址:https://git ...

  3. (译)Objective-C 类属性

    翻译自:Objective-C Class Properties 译者:Haley_Wong 由于Swift 3.0 出了太多令人兴奋的新特性,人们很容易忽略 Objective-C中的小改动.苹果展 ...

  4. 【SSH系列】hibernate映射 -- 一对一双向关联映射

    开篇前言 上篇博文[SSH进阶之路]hibernate映射--一对一单向关联映射,小编介绍了一对一的单向关联映射,单向是指只能从人(Person)这端加载身份证端(IdCard),但是反过来,不能从身 ...

  5. 深度学习&机器学习资源汇总1

    本篇博客的目地,是对工作学习过程中所遇所见的一些有关深度学习.机器学习的优质资源,作分类汇总,方便自己查阅,也方便他人学习借用. 主要会涉及一些优质的理论书籍和论文.一些实惠好用的工具库和开源库.一些 ...

  6. Dynamics CRM2016 升级老版本报“JavaScript Web 资源包含对 Microsoft Dynamics CRM 4.0 (2007) Web 服务终结点的引用”问题的解决办法

    今天在新的服务器上部署了CRM2016 on-premises,并将CRM2015的数据库拷贝过来准备附加后升级,但在升级过程中遇到了如下错误,向导检测到了我的JavaScript Web 资源中包含 ...

  7. Hibernate实体映射文件多对多等关系简单应用技巧

    认真开完以后,就能很简单的写出各种关系了 第一步,写注释: <!--xx属性,本类与Yy(类)的多对一 --> <!--xx属性,本类与Yy(类)的一对多 --> <!- ...

  8. Nginx的负载均衡 - 加权轮询 (Weighted Round Robin) 上篇

    Nginx版本:1.9.1 我的博客:http://blog.csdn.net/zhangskd 算法介绍 来看一个简单的Nginx负载均衡配置. http { upstream cluster { ...

  9. Scala actor的使用

    Actor 为什么需要Actor? Actor的本质即万物皆Actor, Actor之间只有发送消息这一种通信方式.例如,无论是管理员让工作者干活,还是工作者把成果交还给管理员,它们之间也要通过发送消 ...

  10. App引导界面,可以这么玩

    什么是ViewPager,刚一听到这个词,我们可能感觉很奇怪,但是我相信我们大部分人都曾见到过这些界面的.其实它就是我们在安装好一个app之后第一次使用时的那些引导界面的效果.这就是通过ViewPag ...