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. 如何安装并简单的使用OwinHost——Katana

    微软OWIN的提出必然会引起一场风暴,而我们作为C#阵营中一份子,自然免不了会卷入其中.OWIN是什么东西,我在这里就不解析了,还不知道是OWIN是什么的读者请打开浏览器,然后搜索即可,中文的英文的应 ...

  2. C#分布式消息队列 EQueue 2.0 发布啦

    前言 最近花了我几个月的业余时间,对EQueue做了一个重大的改造,消息持久化采用本地写文件的方式.到现在为止,总算完成了,所以第一时间写文章分享给大家这段时间我所积累的一些成果. EQueue开源地 ...

  3. 让ASP.NET接受有“潜在危险”的提交

    什么是有“潜在危险”的提交?马上动手写个简单的例子:   用Visual Studio创建一个空白的ASP.NET MVC程序,一切默认即可,添加一个空白的HomeController,增加一个Ind ...

  4. useful commands for docker beginner

    You may want to add my wechat public account or add my technical blog's RSS feed This list is meant ...

  5. IKAnalyzer

    我们的项目中中文切词使用的是mmseg,有一个不满意的地方是jar包中的默认词典一定会被加载进去,当我对有些term有意见时,无法删除. mmseg中Dictionary.java里一段代码保证了/d ...

  6. linux NFS 配置步骤

    转载 http://woxihuanpes.blog.163.com/blog/static/12423219820097139145238/ NFS server可以看作是一个FILE SERVER ...

  7. Python 学习之路 (一):基础

    数据类型和变量 整数 在Python3中,整数可以处理任意大小的整数,不分长整型和整型, 十六进制用0x开头或者H结尾表示:0x2af ,2afH 用函数 int() 来转换字符串中的数字,里面不能包 ...

  8. ASP.NET MVC5+EF6+EasyUI 后台管理系统(17)-LinQ动态排序

    系列目录 首先修复程序中的一个BUG这个BUG在GridPager类中,把sord修改为sort这个名称填写错误,会导致后台一直无法获取datagrid的排序字段 本来是没有这一讲的,为了使20行的代 ...

  9. 从273二手车的M站点初探js模块化编程

    前言 这几天在看273M站点时被他们的页面交互方式所吸引,他们的首页是采用三次加载+分页的方式.也就说分为大分页和小分页两种交互.大分页就是通过分页按钮来操作,小分页是通过下拉(向下滑动)时异步加载数 ...

  10. Eclipse 安装 SVN 的在线插件

    这是继上次svn 客户端与服务器安装后的如何在Eclipse 环境下在线安装 SVN插件,我的Eclipse版本是4.50 SVN的在线安装 下面为大家提供SVN 的在线安装教程.下面是安装的 详细过 ...