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. APP并非一个人在战斗,还有API—Xamarin.Android回忆录

    前言 一般来说,一个客户端APP并非独立存在的,很多时候需要与服务器交互.大体可分为两方面的数据,常规字符串数据和文件数据,因为这两种数据很可能传输方式不一样,比如字符串之类的数据,使用HTTP协议, ...

  2. 2000条你应知的WPF小姿势 基础篇<45-50 Visual Tree&Logic Tree 附带两个小工具>

    在正文开始之前需要介绍一个人:Sean Sexton. 来自明尼苏达双城的软件工程师.最为出色的是他维护了两个博客:2,000Things You Should Know About C# 和 2,0 ...

  3. 简单的ViewPager了解Scroller类

    View滑动是自定义ViewGroup中十分常见的一个功能.Android提供了多种View滑动的方法. layout方法 offsetLeftAndRight()与offsetTopAndBotto ...

  4. Centos6.5中安装和配置vsftp详细总结

    一.vsftp安装篇 #查看是否安装:rpm -qa|grep vsftpd#卸载vsftpdrpm -e vsftpd-2.2.2-11.el6_3.1x86_64 --nodeps# 安装vsft ...

  5. Atitit 智能云网络摄像机的前世今生与历史 优点  密码默认888888

    Atitit 智能云网络摄像机的前世今生与历史 优点  密码默认888888 用户名admin  密码aaaaaa 网络摄像机是一种结合传统摄像机与网络技术所产生的新一代摄像机,它可以将影像通过网络传 ...

  6. css3盒模型

    css2.1盒模型: 当你定义盒子的宽高后:如果添加padding和border值后盒子的宽高会被撑大 盒子的高度=定义的高度+(padding-top + padding-bottom)+(bord ...

  7. Encountered an unexpected error when attempting to resolve tag helper directive '@addTagHelper' with value '"*, Microsoft.AspNet.Mvc.TagHelpers"'

    project.json 配置: { "version": "1.0.0-*", "compilationOptions": { " ...

  8. javascript中Array的操作

    concat(组合数组) join(数组转字符串) pop(删除最后一个元素) shift(删除第一个元素) push(在数组尾部添加新元素) unshift(在数组头部添加新元素) slice(不改 ...

  9. 5.C#WinForm基础登陆失败三次退出系统

    目标: 登陆界面,登陆错误三次退出程序.假设用户名密码是admin.888888,不区分大小写,(易错点:局部变量与类变量) 局部变量每次运行完毕变量的值都会被销毁,下次再运行,会重新初始化.     ...

  10. C#组件系列———又一款日志组件:Elmah的学习和分享

    前言:好久没动笔了,都有点生疏,12月都要接近尾声,可是这月连一篇的产出都没有,不能坏了“规矩”,今天还是来写一篇.最近个把月确实很忙,不过每天早上还是会抽空来园子里逛逛.一如既往,园子里每年这个时候 ...