首页 > 移动平台 > 详细

android-pulltorefresh源码解析(1)--PullToRefreshListView的使用

时间:2015-03-25 11:57:38      阅读:1265      评论:0      收藏:0      [点我收藏+]

一个强大的拉动刷新开源项目,支持各种控件下拉刷新,ListView、ExpandableListView、GridView、WebView、ScrollView、Horizontal ScrollView、ViewPager、Fragment上下左右拉动刷新。

技术分享

android-pulltorefresh源码里提供了samples,里面分别演示了上面说到的几个页面。

1、PullToRefreshListView

示例PullToRefreshListActivity使用了PullToRefreshListView,它的页面结构很简单,提供了一个自定义控件。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

<!--     The PullToRefreshListView replaces a standard ListView widget. -->

    <com.handmark.pulltorefresh.library.PullToRefreshListView
        android:id="@+id/pull_refresh_list"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:cacheColorHint="#00000000"
        android:divider="#19000000"
        android:dividerHeight="4dp"
        android:fadingEdge="none"
        android:fastScrollEnabled="false"
        android:footerDividersEnabled="false"
        android:headerDividersEnabled="false"
        android:smoothScrollbar="true" />

</LinearLayout>

OnCreate方法:

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 构造ListView控件,调用基类的init方法。
        setContentView(R.layout.activity_ptr_list);

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

        // 设置一个监听对象,在下拉刷新时设置相应的文字和执行对应的任务
        mPullRefreshListView.setOnRefreshListener(new OnRefreshListener<ListView>() {
            @Override
            public void onRefresh(PullToRefreshBase<ListView> refreshView) {

                String label = DateUtils.formatDateTime(getApplicationContext(), System.currentTimeMillis(),
                        DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_ABBREV_ALL);

                // 更新顶部或者底部的刷新标签
                refreshView.getLoadingLayoutProxy().setLastUpdatedLabel(label);

                // 执行刷新时的后台任务
                new GetDataTask().execute();
            }
        });

        // 设置一个底部监听对象,当LiveView最后一个Item显示时触发
        mPullRefreshListView.setOnLastItemVisibleListener(new OnLastItemVisibleListener() {
            @Override
            public void onLastItemVisible() {
                Toast.makeText(PullToRefreshListActivity.this, "End of List!", Toast.LENGTH_SHORT).show();
            }
        });

        // 取得真实的View
        ListView actualListView = mPullRefreshListView.getRefreshableView();

        // 注册为上下文菜单使用的View,即上下文菜单使用的view是真实的View
        registerForContextMenu(actualListView);

        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(State.PULL_TO_REFRESH, R.raw.pull_event);
        soundListener.addSoundEvent(State.RESET, R.raw.reset_sound);
        soundListener.addSoundEvent(State.REFRESHING, R.raw.refreshing_sound);
        mPullRefreshListView.setOnPullEventListener(soundListener);

        // 真实的View控件设置数据适配对象,也可以用 mPullRefreshListView.setAdapter(mAdapter)
        actualListView.setAdapter(mAdapter);
    }

后台任务:

// 取得数据任务
    private class GetDataTask extends AsyncTask<Void, Void, String[]> {

        @Override
        protected String[] doInBackground(Void... params) {
            try {
                // 模拟后台任务
                Thread.sleep(2000);
            } catch (InterruptedException e) {
            }
            return mStrings;
        }

        @Override
        protected void onPostExecute(String[] result) {
            mListItems.addFirst("Added after refresh...");
            mAdapter.notifyDataSetChanged();

            // 当任务执行完毕必须调用onRefreshComplete()
            mPullRefreshListView.onRefreshComplete();

            super.onPostExecute(result);
        }
    }

通过以上的代码的注释,如何使用PullToRefreshListView大概有的简要的了解,归纳如下:

1、创建PullToRefreshListView实例

2、设置OnRefreshListener对象

3、在onRefresh刷新后,调用onRefreshComplete,来完成刷新。

下一章对关键步骤分析一下处理流程。

android-pulltorefresh源码解析(1)--PullToRefreshListView的使用

原文:http://www.cnblogs.com/seven1979/p/4364935.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!