`
rensanning
  • 浏览: 3515326 次
  • 性别: Icon_minigender_1
  • 来自: 大连
博客专栏
Efef1dba-f7dd-3931-8a61-8e1c76c3e39f
使用Titanium Mo...
浏览量:37505
Bbab2146-6e1d-3c50-acd6-c8bae29e307d
Cordova 3.x入门...
浏览量:604415
C08766e7-8a33-3f9b-9155-654af05c3484
常用Java开源Libra...
浏览量:678191
77063fb3-0ee7-3bfa-9c72-2a0234ebf83e
搭建 CentOS 6 服...
浏览量:87346
E40e5e76-1f3b-398e-b6a6-dc9cfbb38156
Spring Boot 入...
浏览量:399876
Abe39461-b089-344f-99fa-cdfbddea0e18
基于Spring Secu...
浏览量:69090
66a41a70-fdf0-3dc9-aa31-19b7e8b24672
MQTT入门
浏览量:90521
社区版块
存档分类
最新评论

Android UI列表的上拉下拉刷新之Android-PullToRefresh

 
阅读更多
Library下载地址:
https://github.com/chrisbanes/Android-PullToRefresh

版本:Android-PullToRefresh-2.1.1

(1) 设置Listview
layout文件中定义PullToRefreshListView

<com.handmark.pulltorefresh.library.PullToRefreshListView
    android:id="@+id/list_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />


(2)设置Mode

PullToRefreshListView mListView = (PullToRefreshListView) findViewById(R.id.list_view);
mListView.setMode(Mode.BOTH);


  • Mode.BOTH:同时支持上拉下拉
  • Mode.PULL_FROM_START:只支持下拉Pulling Down
  • Mode.PULL_FROM_END:只支持上拉Pulling Up


(3)实现Listener

如果Mode设置成Mode.BOTH,需要设置刷新Listener为OnRefreshListener2,并实现onPullDownToRefresh()、onPullUpToRefresh()两个方法。

如果Mode设置成Mode.PULL_FROM_START或Mode.PULL_FROM_END,需要设置刷新Listener为OnRefreshListener,同时实现onRefresh()方法。当然也可以设置为OnRefreshListener2,但是Mode.PULL_FROM_START的时候只调用onPullDownToRefresh()方法,Mode.PULL_FROM的时候只调用onPullUpToRefresh()方法.

(4)举例
public class MainActivity extends Activity {
	
	private ArrayList<String> mListItems;
    private PullToRefreshListView mListView;
    private SampleListAdapter mAdapter;
	
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.sample);
        
        // 设置初期数据
        mListItems = new ArrayList<String>();
    	for (int i = 1; i <= 10; i++) {
    		mListItems.add("Item " + Integer.toString(i));
    	}

        // 设置ListView
        mListView = (PullToRefreshListView) findViewById(R.id.list_view);
        mAdapter = new SampleListAdapter();
        mListView.setAdapter(mAdapter);
        
        // 设置PullToRefresh
        mListView.setMode(Mode.BOTH);
        mListView.setOnRefreshListener(new OnRefreshListener2<ListView>(){
 
        	// 下拉Pulling Down
            @Override
            public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {
            	// 下拉的时候数据重置
                mListItems = new ArrayList<String>();
            	for (int i = 1; i <= 10; i++) {
            		mListItems.add("Item " + Integer.toString(i));
            	}
            	mAdapter.notifyDataSetChanged();
            	
                new FinishRefresh().execute();
            }
            
            // 上拉Pulling Up
            @Override
            public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {
            	// 上拉的时候添加选项
                int count = mListItems.size();
                mListItems.add("Item " + Integer.toString(++count));
                mAdapter.notifyDataSetChanged();
                
                new FinishRefresh().execute();
            }
 
        });
        
    }
    
    private class SampleListAdapter extends BaseAdapter {
    	 
        @Override
        public int getCount() {
            return mListItems.size();
        }
 
        @Override
        public Object getItem(int index) {
            return mListItems.get(index);
        }
 
        @Override
        public long getItemId(int index) {
            return index;
        }
 
        @Override
        public View getView(int index, View view, ViewGroup arg2) {
            if(view == null){
                LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                view = inflater.inflate(R.layout.list_item, null);
            }
            TextView textView = (TextView)view.findViewById(R.id.listItemText);
            textView.setText(mListItems.get(index));
            return view;
        }
    }
 
    private class FinishRefresh extends AsyncTask<Void, Void, Void>{
        @Override
        protected Void doInBackground(Void... params) {
            return null;
        }
 
        @Override
        protected void onPostExecute(Void result){
            mListView.onRefreshComplete();
        }
    }
}


初期:


上拉:


上拉后:


下拉:


下拉后:

  • 大小: 41.1 KB
  • 大小: 38.6 KB
  • 大小: 42.1 KB
  • 大小: 43.6 KB
  • 大小: 41.5 KB
分享到:
评论
9 楼 diskdj 2015-03-04  
diskdj 写道

Android-PullToRefresh-master\library

No projects are found to import

已经解决
8 楼 diskdj 2015-03-04  

Android-PullToRefresh-master\library

No projects are found to import
7 楼 rensanning 2015-02-06  
@好事DOMO 
6 楼 好事DOMO 2015-02-06  
使用Eclipse而不会导入第3方源码的同学,请做一下操作:
1、根据博主的连接下载 Library。zip,解压
2、右键点击 PullToRefreshSample (博主的项目),选择 Exsiting Android Code Into Workspace
3、选择解压后的 Library。zip 文件夹后,点击Finish。
5 楼 rensanning 2015-01-15  
@lokalswimmer 这里只是想简单的演示这个开源代码能够实现的效果,开源代码会不断的功能更新,如果想活用它,做好的方法是看懂它的API,或者阅读它提供的文档。引用第三方lib的方法google一下有很多详细的文章。

@wgd12389 这里只是个例子来演示效果,真正开发的话也不会去清除list,而是获取新的数据append到List的头部或者有其他的业务需求。不用太在意测试代码的细节,重在理解它能实现及如何实现的这种效果。
4 楼 wgd12389 2015-01-15  
楼主在下拉刷新处理的时候有个问题
mListItems = new ArrayList<String>();
这句话应该变成
mListItems.clear(); 
如果是吧数据源new的话会产生新的实例,在你下拉刷新后,通知线程去刷新ui,数据适配源其实还是原来的数据适配源,只不过mListItems 产生了新的实例,指向了新的地址
所以你下拉刷新就不会生效,对ui刷新不会起到任何作用
3 楼 lokalswimmer 2015-01-13  
源代码引用这三个library,包含错误,都不知道怎么解决
2 楼 lokalswimmer 2015-01-13  
有时候,我觉得看博客不如看demo源码,再跑回来看博客,很多东西就通了
1 楼 小桔子 2014-12-04  
就是这个Library不会处理。。。

相关推荐

Global site tag (gtag.js) - Google Analytics