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. 一步步学习javascript基础篇(9):ajax请求的回退

    需求1: ajax异步请求 url标识请求参数(也就是说复制url在新页面打开也会是ajax后的效果) ajax异步请求没问题,问题一般出在刷新url后请求的数据没了,这就是因为url没有记录参数.如 ...

  2. 更有效率的使用Visual Studio(二)

    没想到上一篇文章有这么多人喜欢,多谢大家支持.继续- 很多比较通用的快捷键的默认设置其实是有一些缩写在里面的,这个估计也是MS帮助我们记忆.比如说注释代码的快捷键是Ctrl + E + C,我们如果知 ...

  3. golang的安装

    整理了一下,网上关于golang的安装有三种方式(注明一下,我的环境为CentOS-6.x, 64bit) 方式一:yum安装(最简单) rpm -Uvh http://dl.fedoraprojec ...

  4. java类的加载机制

    什么是类装载器ClassLoader ClassLoader是一个抽象类 ClassLoader的实例将读入Java字节码将类装载到JVM中 ClassLoader可以定制,满足不同的字节码流获取方式 ...

  5. 【MSP是什么】MSP认证之项目群管理学习总结

    首先要说的是,我这篇体会是针对一定的背景的,不能算是一种通用的管理方式,只能是我自己的经验总结,能给大家平常的管理提供一点思路,我就很满足了.先说说背景,我所在公司做的是大型桌面应用软件,简单点说就是 ...

  6. 作为Coder的利器记载

    工作近三年,使用PC快六年,拥抱Mac整一年,投具器石榴裙三年.14年第一次被同事推荐Everything,开启了JeffJade对工具的折腾之旅,并乐此不疲.时去两年,这必然是消耗了一些时间,但对效 ...

  7. <a> href属性--记录八

    1.去掉<a>标签的下划线 <ul style=" list-style-type:none; margin:0;color:Gray; font-size:11px;ma ...

  8. 简单编写Makefile

    相信很多朋友都有过这样的经历,看着开源项目中好几页的makefile文件,不知所云.在日常学习和工作中,也有意无意的去回避makefile,能改就不写,能用ide就用ide.其实makefile并没有 ...

  9. VC 中与字符串相关的宏 _T、TEXT,_TEXT、L 的作用

    CSDN原博文:http://blog.csdn.net/houkai363/article/details/8134787 遇到了:不能将参数 1 从“const char [5]”转换为“LPCT ...

  10. Android自定义View之圆环交替 等待效果

    学习了前面两篇的知识,对于本篇实现的效果,相信大家都不会感觉太困难,我要实现的效果是什么样呢?下面请先看效果图: 看上去是不很炫的样子,它的实现上也不是很复杂,重点在与onDraw()方法的绘制. 首 ...