public class MainActivity extends Activity {

//MENU itemid
        /**手动执行刷新*/
        static final int MENU_MANUAL_REFRESH = 0;
        /** 数据加载中是否允许滑动*/
        static final int MENU_DISABLE_SCROLL = 1;
        /**刷新模式,
         * 包括{
         * 1.DISABLED(0x0)              禁止通过手势和手动执行
         * 2.PULL_FROM_START(0x1)        可执行下拉刷新
         * 3.PULL_FROM_END(0x2)            可执行上拉刷新
         * 3.BOTH(0x3)                    上下都可执行
         * 4.MANUAL_REFRESH_ONLY(0x4)    禁止通过手势执行,但可以手动设置
         * }*/
        static final int MENU_SET_MODE = 2;
        //MENU itemid end
        /**这里我们来判断是下拉还是上拉*/
        private PullToRefreshBase.Mode CurrentMode;

private LinkedList<String> mListItems;

private PullToRefreshListView mPullRefreshListView;

private ArrayAdapter<String> mAdapter;

@Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_ptr_list);

mPullRefreshListView = (PullToRefreshListView) findViewById(R.id.pull_refresh_list);

//监听列表被刷新时事件.
            mPullRefreshListView
                    .setOnRefreshListener(new PullToRefreshBase.OnRefreshListener<ListView>() {
                        @Override
                        public void onRefresh(
                                PullToRefreshBase<ListView> refreshView) {

int flags=DateUtils.FORMAT_SHOW_TIME
                                    | DateUtils.FORMAT_SHOW_DATE
                                    | DateUtils.FORMAT_ABBREV_ALL;

String label = DateUtils.formatDateTime(
                                    getApplicationContext(),
                                    System.currentTimeMillis(),flags
                            );
                            CurrentMode=refreshView.getCurrentMode();
                            // 更新最后刷新时间
                            refreshView.getLoadingLayoutProxy()
                                    .setLastUpdatedLabel(label);

// 执行加载更多数据任务.
                            new GetDataTask().execute();
                        }
                    });

//监听滑动到底部的事件
            mPullRefreshListView
                    .setOnLastItemVisibleListener(new PullToRefreshBase.OnLastItemVisibleListener() {

@Override
                        public void onLastItemVisible() {
                            Toast.makeText(MainActivity.this,
                                    "已到列表底部!", Toast.LENGTH_SHORT).show();
                        }
                    });

ListView actualListView = mPullRefreshListView.getRefreshableView();

mListItems = new LinkedList<String>();
            mListItems.addAll(Arrays.asList(mStrings));

mAdapter = new ArrayAdapter<String>(this,
                    android.R.layout.simple_list_item_1, mListItems);

//这里可以根据状态的变化来添加声音事件
            SoundPullEventListener<ListView> soundListener = new SoundPullEventListener<ListView>(
                    this);
            soundListener.addSoundEvent(PullToRefreshBase.State.PULL_TO_REFRESH, R.raw.pull_event);
            soundListener.addSoundEvent(PullToRefreshBase.State.RESET, R.raw.reset_sound);
            soundListener.addSoundEvent(PullToRefreshBase.State.REFRESHING,
                    R.raw.refreshing_sound);
            mPullRefreshListView.setOnPullEventListener(soundListener);

actualListView.setAdapter(mAdapter);
        }

private class GetDataTask extends AsyncTask<Void, Void, String[]> {

@Override
            protected String[] doInBackground(Void... params) {
                try {
                    Thread.sleep(3000);
                } catch (InterruptedException e) {
                }
                return mStrings;
            }

@Override
            protected void onPostExecute(String[] result) {
                //这里是提供给我们比较MODE的方法,返回0则表示相当
                if (CurrentMode.compareTo(PullToRefreshBase.Mode.PULL_FROM_START)==0) {
                    mListItems.addFirst("+下拉新增数据");
                }else {
                    mListItems.addLast("+上拉新增数据");
                }

mAdapter.notifyDataSetChanged();

//当数据加载完成,需要调用onRefreshComplete.
                mPullRefreshListView.onRefreshComplete();

super.onPostExecute(result);
            }
        }
        /**
         * 此方法只在初次加载时调用
         */
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            menu.add(0, MENU_MANUAL_REFRESH, 0, "手动刷新");
            menu.add(
                    0,
                    MENU_DISABLE_SCROLL,
                    1,
                    mPullRefreshListView.isScrollingWhileRefreshingEnabled() ? "加载中禁止滑动"
                            : "加载中可滑动");
            menu.add(
                    0,
                    MENU_SET_MODE,
                    0,
                    mPullRefreshListView.getMode() == PullToRefreshBase.Mode.BOTH ? "模式:下拉刷新"
                            : "模式:上下拉刷新");
            return super.onCreateOptionsMenu(menu);
        }
        /**
         * 此方法每次点击都会调用
         */
        @Override
        public boolean onPrepareOptionsMenu(Menu menu) {
            MenuItem disableItem = menu.findItem(MENU_DISABLE_SCROLL);
            disableItem
                    .setTitle(mPullRefreshListView
                            .isScrollingWhileRefreshingEnabled() ? "加载中禁止滑动"
                            : "加载中可滑动");

MenuItem setModeItem = menu.findItem(MENU_SET_MODE);
            setModeItem
                    .setTitle(mPullRefreshListView.getMode() == PullToRefreshBase.Mode.BOTH ? "模式:下拉刷新"
                            : "模式:上下拉刷新");

return super.onPrepareOptionsMenu(menu);
        }

@Override
        public boolean onOptionsItemSelected(MenuItem item) {

switch (item.getItemId()) {
                case MENU_MANUAL_REFRESH:
                    new GetDataTask().execute();
                    mPullRefreshListView.setRefreshing(false);
                    break;
                case MENU_DISABLE_SCROLL:
                    mPullRefreshListView
                            .setScrollingWhileRefreshingEnabled(!mPullRefreshListView
                                    .isScrollingWhileRefreshingEnabled());
                    break;
                case MENU_SET_MODE:
                    mPullRefreshListView
                            .setMode(mPullRefreshListView.getMode() == PullToRefreshBase.Mode.BOTH ? PullToRefreshBase.Mode.PULL_FROM_START
                                    : PullToRefreshBase.Mode.BOTH);
                    break;
            }

return super.onOptionsItemSelected(item);
        }

private String[] mStrings = {     "当前数据", "当前数据", "当前数据", "当前数据", "当前数据",
                "当前数据", "当前数据", "当前数据", "当前数据", "当前数据",
                "当前数据", "当前数据", "当前数据", "当前数据", "当前数据",
                "当前数据", "当前数据", "当前数据", "当前数据", "当前数据" };
    }

PullToRefreshListView的使用的更多相关文章

  1. pullToRefreshListView的简单使用

    1.加入library后直接布局 library下载地址:http://pan.baidu.com/s/1dFJu8pF <com.handmark.pulltorefresh.library. ...

  2. PullToRefreshListView加载更多定位的解决方法

    之前项目里,早起用到了PullToRefreshListView,后来一部分用到了RefreshListView,最近在做优化的时候,其中一个问题就是PullToRefreshlistView上拉加载 ...

  3. RecyclerView和PullToRefreshListView的对比

    项目中上拉刷新和下拉加载一直都是比较常见的:以前一般都是重写ListView或直接用PullToRefreshListView的框架:最近尝试用RecyclerView来实现下拉加载上拉刷新也是不错的 ...

  4. ListView、PullToRefreshListView滑动加载可见item

    最近用的了PullToRefreshListView框架,也在listView中加载图片,对于滑动加载可见item,网上找了一些相关文档,但都不太合适,如:http://blog.csdn.net/z ...

  5. Android PullToRefreshListView上拉刷新和下拉刷新

    PullToRefreshListView实现上拉和下拉刷新有两个步骤: 1.设置刷新方式 pullToRefreshView.setMode(PullToRefreshBase.Mode.BOTH) ...

  6. Android ScrollView+ViewPager+PullToRefreshListView

    想达到此界面的风格 然后ViewPage里面第一个Fragment是一个瀑布流 这个瀑布流要有加载跟多 在ScrollView中,嵌套ViewPager,在ViewPager的每页使用Fragment ...

  7. PullToRefreshListView调用onRefreshComplete方法 无法取消刷新的bug

    我们在使用框架:   PullToRefreshListView 实现下拉或者上拉加载时候,可能在上拉 完成时候,调用onRefreshComplete方法去 停止 刷新操作,但是,可能无效,测试产生 ...

  8. 95秀-PullToRefreshListView 示例

        正在加载.暂无数据页面 public class RefreshGuideTool {     private RelativeLayout rl_loading_guide;//整个View ...

  9. PullToRefreshListView组件的OnItemClickListener中的position下标问题

    /** * Pass-through method for {[url=home.php?mod=space&uid=91636]@link[/url] PullToRefreshBase#g ...

随机推荐

  1. .NET跨平台:在Ubuntu上用自己编译的dnx运行ASP.NET 5示例程序

    在 Linux Ubuntu 上成功编译 dnx 之后,会在 artifacts/build/ 文件夹中生成 dnx-coreclr-linux-x64/ 与 dnx-mono/ 这2个文件夹,前者是 ...

  2. 访问IIS网站需要输入用户名密码(非匿名登录)问题汇总

    无语了,最近不少Windows服务器都出现这个访问网站需要输入的问题,而且每次解决方法还不一样...唉,先汇总下解决方法吧,有时间再仔细研究下这些问题是如何导致的. 当IIS已启用"允许匿名 ...

  3. GroupData群数据库的还原与优化

    一.背景 这个数据库的数据文件mdf大概有83G左右,当还原数据库之后感觉可以做很多性能方面上的调优,合并数据后mdf数据文件大概有59G左右,行压缩后mdf数据文件大概有39G左右,页压缩后mdf数 ...

  4. 【Win 10 应用开发】加载外部的 srt 字幕

    据说系统内置的多媒体功能支持 srt. ssa 等字幕,老周测试过几种格式的字幕均能加载. SRT 字幕是最简单的字幕结构,甚至你用记事本都能做出来,就是分为几行来写. 第一行是字幕的编号,应该是从1 ...

  5. 总结一下CSS中的定位 Position 属性

    在CSS中,Position 属性经常会用到,主要是绝对定位和相对定位,简单的使用都没有问题,尤其嵌套起来,就会有些混乱,今记录总结一下,防止久而忘之. CSS position 属性值: absol ...

  6. CSS3中的动画效果记录

    今天要记录的是CSS3中的三种属性transform.transition以及animation,这三个属性大大提升了css处理动画的能力. 一.Transform 变形 CSS中transform ...

  7. 网络爬虫: 从allitebooks.com抓取书籍信息并从amazon.com抓取价格(1): 基础知识Beautiful Soup

    开始学习网络数据挖掘方面的知识,首先从Beautiful Soup入手(Beautiful Soup是一个Python库,功能是从HTML和XML中解析数据),打算以三篇博文纪录学习Beautiful ...

  8. 用Crontab打造简易工作流引擎

    1. 引言 众所周知,Oozie(1, 2)是基于时间条件与数据生成来做工作流调度的,但是Oozie的数据触发条件只支持HDFS路径,故而面临着这样的问题: 无法判断Hive partition是否已 ...

  9. go-hbase的Scan模型源码分析

    git地址在这里: https://github.com/Lazyshot/go-hbase 这是一个使用go操作hbase的行为. 分析scan行为 如何使用scan看下面这个例子,伪代码如下: f ...

  10. Ionic2系列——Ionic 2 Guide 官方文档中文版

    最近一直没更新博客,业余时间都在翻译Ionic2的文档.之前本来是想写一个入门,后来觉得干脆把官方文档翻译一下算了,因为官方文档就是最好的入门教程.后来越翻译越觉得这个事情确实比较费精力,不知道什么时 ...