采用github上的开源项目Android-PullToRefresh实现ListView的下拉刷新和上拉加载
2014-07-31 15:14
876 查看
先说明下,本人刚学习android不满一个月,然后就被安排了弄出一个下拉刷新和上拉加载的demo,这段时间一直在看代码,看的头都大了。还好找到了巨人们的肩膀,帮了我一个大忙,为了不使这几天的辛苦白费,赶紧来写下来以便以后参考。
首先谢谢这位博主的文章,链接http://blog.csdn.net/ueryueryuery/article/details/17440465。正是这一篇文章,解决了原来的Android-PullToRefresh项目里不能上拉加载的问题。
其次,再谢谢老罗的视频吧,解决了我从数据库里面刷新数据的困难,推荐大家去看看。
首先谢谢这位博主的文章,链接http://blog.csdn.net/ueryueryuery/article/details/17440465。正是这一篇文章,解决了原来的Android-PullToRefresh项目里不能上拉加载的问题。
其次,再谢谢老罗的视频吧,解决了我从数据库里面刷新数据的困难,推荐大家去看看。
package com.handmark.pulltorefresh.samples; import java.util.ArrayList; import java.util.HashMap; import java.util.Map; import android.app.ListActivity; import android.os.AsyncTask; import android.os.Bundle; import android.text.format.DateUtils; import android.widget.ListView; import android.widget.SimpleAdapter; import android.widget.Toast; import com.handmark.pulltorefresh.library.PullToRefreshBase; import com.handmark.pulltorefresh.library.PullToRefreshBase.Mode; import com.handmark.pulltorefresh.library.PullToRefreshBase.OnRefreshListener; import com.handmark.pulltorefresh.library.PullToRefreshListView; /** * @author weaver 2014-7-28 * @version */ public final class PullToRefreshListActivity extends ListActivity { //需要自定义一个view,因为普通的ListView是无法实现上拉或者下拉的操作的 private PullToRefreshListView mPullRefreshListView; //listItem private ArrayList<HashMap<String, Object>> listItem; //listItem的适配器 private SimpleAdapter listItemAdapter; //服务器返回的字符串 private String[] dataStrings = null; private String[] newsTitle = new String[10]; private String[] newsTime = new String[10]; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_ptr_list); mPullRefreshListView = (PullToRefreshListView) findViewById(R.id.pull_refresh_list); //设置mPullRefreshListView的模式,表示上拉和下拉都可以 mPullRefreshListView.setMode(Mode.BOTH); //设置上拉时显示的字 mPullRefreshListView.getLoadingLayoutProxy(false, true).setPullLabel(getString(R.string.pull_to_load)); mPullRefreshListView.getLoadingLayoutProxy(false, true).setRefreshingLabel(getString(R.string.loading)); mPullRefreshListView.getLoadingLayoutProxy(false, true).setReleaseLabel(getString(R.string.release_to_load)); // 刷新时执行的操作 mPullRefreshListView .setOnRefreshListener(new OnRefreshListener<ListView>() { @Override public void onRefresh( PullToRefreshBase<ListView> refreshView) { //刷新时显示刷新的时间的label String label = DateUtils.formatDateTime( getApplicationContext(), System.currentTimeMillis(), DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_ABBREV_ALL); // Update the LastUpdatedLabel refreshView.getLoadingLayoutProxy() .setLastUpdatedLabel(label); // Do work to refresh the list here. if(refreshView.isHeaderShown()){ //下拉刷新,自定义的操作可以添加在这 new GetDataTask().execute(); }else{ //上拉加载更多,自定义的操作可以添加在这 new GetDataTaskFromLocal().execute() ; } } }); listItem = new ArrayList<HashMap<String, Object>>(); for (int i = 0; i < 10; i++) { HashMap<String, Object> map = new HashMap<String, Object>(); map.put("ItemTitle", "求人不如求己" + i); map.put("ItemTime", "2014-07-2" + i); listItem.add(0, map); } listItemAdapter = new SimpleAdapter(this, listItem,// 数据源 R.layout.list_items,// ListItem的XML实现 // 动态数组与ImageItem对应的子项 new String[] { "ItemTitle", "ItemTime" }, // ImageItem的XML文件里面的一个ImageView,两个TextView ID new int[] { R.id.ItemTitle, R.id.ItemTime }); // 添加并且显示 mPullRefreshListView.setAdapter(listItemAdapter); } /** * @author weaver 2014-7-30 * @version 下拉刷新异步任务AsynTask */ private class GetDataTask extends AsyncTask<Void, Void, Void> { /* * 后台进程 ,连接服务器,刷新listview */ @Override protected Void doInBackground(Void... params) { try { Map<String, String> param = new HashMap<String, String>(); param.put("username", "admin"); param.put("password", "123"); String result = HttpUtils.sendPostMessage(param, "utf-8"); dataStrings = result.split("\n"); for (int i = 0, j = 0; i < dataStrings.length; i += 2, j++) { newsTitle[j] = dataStrings[i]; newsTime[j] = dataStrings[i + 1]; } Thread.sleep(1000); } catch (InterruptedException e) { } return null; } protected void onPostExecute(Void result) { for (int i = 0; i < newsTime.length; i++) { if ((newsTitle[i] != null) && (newsTime[i] != null)) { HashMap<String, Object> mymap = new HashMap<String, Object>(); mymap.put("ItemTitle", newsTitle[i]); mymap.put("ItemTime", newsTime[i]); listItem.add(0, mymap); } } // 通知adapter数据刷新 listItemAdapter.notifyDataSetChanged(); // 通知刷新完成. mPullRefreshListView.onRefreshComplete(); super.onPostExecute(result); } } /** * 上拉加载更多异步任务 * @author weaver * 2014-7-31 * @version */ private class GetDataTaskFromLocal extends AsyncTask<Void, Void, Void> { /* * 后台进程 ,连接服务器,刷新listview */ @Override protected Void doInBackground(Void... params) { try { Map<String, String> param = new HashMap<String, String>(); param.put("username", "admin"); param.put("password", "123"); String result = HttpUtils.sendPostMessage(param, "utf-8"); dataStrings = result.split("\n"); for (int i = 0, j = 0; i < dataStrings.length; i += 2, j++) { newsTitle[j] = dataStrings[i]; newsTime[j] = dataStrings[i + 1]; } Thread.sleep(1000); } catch (InterruptedException e) { } return null; } protected void onPostExecute(Void result) { for (int i = 0; i < newsTime.length; i++) { if ((newsTitle[i] != null) && (newsTime[i] != null)) { HashMap<String, Object> mymap = new HashMap<String, Object>(); mymap.put("ItemTitle", newsTitle[i]); mymap.put("ItemTime", newsTime[i]); listItem.add(mymap); } } // 通知adapter数据刷新 listItemAdapter.notifyDataSetChanged(); // 通知刷新完成. mPullRefreshListView.onRefreshComplete(); super.onPostExecute(result); } } }
其他的xml文件都比较简单,就不贴上来了。(由于刚学习,还不会使用json啥的,导致处理数据有点丑。。。。)
相关文章推荐
- Android项目:使用pulltorefresh开源项目扩展为下拉刷新上拉加载更多的处理方法,监听listview滚动方向 推荐
- Android项目:使用pulltorefresh开源项目扩展为下拉刷新上拉加载更多的处理方法,监听listview滚动方向
- Android项目:使用pulltorefresh开源项目扩展为下拉刷新上拉加载更多的处理方法,监听listview滚动方向
- android ListView上拉加载更多 下拉刷新功能实现(采用pull-to-refresh)
- android ListView上拉加载更多 下拉刷新功能实现(采用pull-to-refresh)
- android ListView上拉加载更多 下拉刷新功能实现(采用pull-to-refresh)
- Android 使用PullToRefresh实现下拉刷新和上拉加载(ExpandableListView)
- 使用开源项目PullToRefresh实现下拉刷新和上拉加载
- android-Ultra-Pull-To-Refresh既可以实现下拉刷新又可以上拉加载的国人写的优秀库
- Android程序开发之使用PullToRefresh实现下拉刷新和上拉加载
- android使用PullToRefresh实现下拉刷新和上拉加载
- android中的几个GitHub的应用,一个半圆弧形进度条,一个侧拉SwipeMenuListView,下拉刷新上拉加载PullToRefresh
- android 使用PullToRefresh实现下拉刷新和上拉加载更多
- PullToRefreshListView实现下拉刷新和上拉加载更多
- 安卓开发笔记——关于开源组件PullToRefresh实现下拉刷新和上拉加载(一分钟搞定,超级简单)
- Android中PullToRefreshListView的下拉刷新,下拉加载的实现
- 使用SwipeRefreshLayout和自定义的PullToReFreshListView实现下拉刷新和上拉加载更多
- 实现上拉、下拉刷新的开源项目Android-PullToRefresh 的使用
- 【Android开发笔记】pulltorefresh实现下拉刷新和上拉加载更多
- PullToRefresh实现下拉刷新和上拉加载更多的ListView