PullToRefresh的使用
主界面↓
1 package com.wangzhen.pulltorefresh; 2 3 import java.util.ArrayList; 4 import java.util.List; 5 6 import com.handmark.pulltorefresh.library.PullToRefreshBase; 7 import com.handmark.pulltorefresh.library.PullToRefreshBase.OnRefreshListener; 8 import com.handmark.pulltorefresh.library.PullToRefreshListView; 9 import com.handmark.pulltorefresh.library.PullToRefreshBase.Mode; 10 import com.lidroid.xutils.ViewUtils; 11 import com.lidroid.xutils.view.annotation.ContentView; 12 import com.lidroid.xutils.view.annotation.ViewInject; 13 import com.wangzhen.adapter.MessageAdapter; 14 import com.wangzhen.bean.NewsBean; 15 import com.wangzhen.listener.HttpDataListener; 16 import com.wangzhen.tasks.LoadNewsTask; 17 18 import android.support.v7.app.ActionBarActivity; 19 import android.text.format.DateUtils; 20 import android.widget.ListView; 21 import android.content.Context; 22 import android.os.Bundle; 23 24 @ContentView(R.layout.activity_main) 25 public class MainActivity extends ActionBarActivity { 26 27 @ViewInject(R.id.ListView_PullToRefresh) 28 private PullToRefreshListView ListView_PullToRefresh; 29 30 Context mContext; 31 MessageAdapter adapter; 32 private HttpDataListener mDataListener; 33 34 @Override 35 protected void onCreate(Bundle savedInstanceState) { 36 super.onCreate(savedInstanceState); 37 ViewUtils.inject(this); 38 mContext = this; 39 40 Setup(); 41 InitListener(); 42 43 List<NewsBean> list = new ArrayList<NewsBean>(); 44 for (int i = 0; i < 5; i++) { 45 NewsBean bean = new NewsBean(); 46 bean.setNewsImageURL(""); 47 bean.setNewsTitle("标题" + (i + 1)); 48 bean.setNewsContent("内容" + (i + 1)); 49 list.add(bean); 50 } 51 adapter = new MessageAdapter(mContext, list); 52 ListView_PullToRefresh.setAdapter(adapter); 53 54 ListView_PullToRefresh 55 .setOnRefreshListener(new OnRefreshListener<ListView>() { 56 57 @Override 58 public void onRefresh( 59 PullToRefreshBase<ListView> refreshView) { 60 String time = DateUtils.formatDateTime(mContext, 61 System.currentTimeMillis(), 62 DateUtils.FORMAT_SHOW_TIME 63 | DateUtils.FORMAT_SHOW_DATE 64 | DateUtils.FORMAT_ABBREV_ALL); 65 66 // 下拉刷新 67 if (refreshView.isShownHeader()) { 68 // 设置刷新标签 69 ListView_PullToRefresh.getLoadingLayoutProxy() 70 .setRefreshingLabel("正在刷新"); 71 // 设置刷新标签 72 ListView_PullToRefresh.getLoadingLayoutProxy() 73 .setPullLabel("下拉刷新"); 74 // 设置刷新标签 75 ListView_PullToRefresh.getLoadingLayoutProxy() 76 .setReleaseLabel("释放开始刷新"); 77 // 设置上一次刷新的提示标签 78 refreshView.getLoadingLayoutProxy() 79 .setLastUpdatedLabel("最后更新时间:" + time); 80 } 81 // 上拉加载 82 if (refreshView.isShownFooter()) { 83 // 设置刷新标签 84 ListView_PullToRefresh.getLoadingLayoutProxy() 85 .setRefreshingLabel("正在加载"); 86 // 设置刷新标签 87 ListView_PullToRefresh.getLoadingLayoutProxy() 88 .setPullLabel("上拉加载更多"); 89 // 设置刷新标签 90 ListView_PullToRefresh.getLoadingLayoutProxy() 91 .setReleaseLabel("释放开始加载"); 92 // 设置上一次刷新的提示标签 93 refreshView.getLoadingLayoutProxy() 94 .setLastUpdatedLabel("最后加载时间:" + time); 95 } 96 new LoadNewsTask(ListView_PullToRefresh, mDataListener) 97 .execute(); 98 } 99 }); 100 } 101 102 /** 103 * 初始化监听器 104 */ 105 private void InitListener() { 106 mDataListener = new HttpDataListener() { 107 108 @Override 109 public void ParseResponse(List<NewsBean> list) { 110 if (list == null) { 111 return; 112 } 113 adapter.AddData(list); 114 adapter.notifyDataSetChanged(); 115 } 116 }; 117 } 118 119 /** 120 * 对下拉刷新和上拉加载进行设置 121 */ 122 private void Setup() { 123 /** 124 * PullToRefresh刷新模式 125 * Both:上拉刷新和下拉刷新都支持 126 * DIABLED:禁用上拉下拉刷新 127 * PULL_FROM_START:仅支持下拉刷新 128 * PULL_FROM_END:仅支持上拉加载 129 * MANUAL_REFRESH_ONLY:只允许手动触发 130 */ 131 ListView_PullToRefresh.setMode(Mode.BOTH); 132 } 133 }
HTTP接口↓
1 package com.wangzhen.listener; 2 3 import java.util.List; 4 5 import com.wangzhen.bean.NewsBean; 6 7 /** 8 * HTTP请求接口 9 * @author Administrator 10 * 11 */ 12 public interface HttpDataListener { 13 14 /*** 15 * 解析服务器返回结果 16 * 17 * @param list 18 */ 19 public abstract void ParseResponse(List<NewsBean> list); 20 }
异步加载类↓
1 package com.wangzhen.tasks; 2 3 import java.util.ArrayList; 4 import java.util.List; 5 6 import com.handmark.pulltorefresh.library.PullToRefreshListView; 7 import com.wangzhen.bean.NewsBean; 8 import com.wangzhen.listener.HttpDataListener; 9 10 import android.os.AsyncTask; 11 12 /** 13 * 异步加载新闻 14 * 15 * @author Administrator 16 * 17 */ 18 public class LoadNewsTask extends AsyncTask<String, Void, List<NewsBean>> { 19 20 PullToRefreshListView mListView; 21 HttpDataListener mListener; 22 23 public LoadNewsTask(PullToRefreshListView listView, 24 HttpDataListener listener) { 25 mListView = listView; 26 mListener = listener; 27 } 28 29 @Override 30 protected void onPostExecute(List<NewsBean> result) { 31 super.onPostExecute(result); 32 mListView.onRefreshComplete(); 33 mListener.ParseResponse(result); 34 } 35 36 @Override 37 protected List<NewsBean> doInBackground(String... params) { 38 try { 39 Thread.sleep(2000); 40 } catch (InterruptedException e) { 41 e.printStackTrace(); 42 } 43 return GenerateData(); 44 } 45 46 /** 47 * 生成数据 48 * 49 * @return 50 */ 51 private List<NewsBean> GenerateData() { 52 List<NewsBean> list = new ArrayList<NewsBean>(); 53 for (int i = 0; i < 5; i++) { 54 NewsBean bean = new NewsBean(); 55 bean.setNewsImageURL(""); 56 bean.setNewsTitle("添加标题" + (i + 1)); 57 bean.setNewsContent("添加内容" + (i + 1)); 58 list.add(bean); 59 } 60 return list; 61 } 62 63 }
消息适配器↓
1 package com.wangzhen.adapter; 2 3 import java.util.List; 4 5 import com.wangzhen.bean.NewsBean; 6 import com.wangzhen.pulltorefresh.R; 7 8 import android.content.Context; 9 import android.view.LayoutInflater; 10 import android.view.View; 11 import android.view.ViewGroup; 12 import android.widget.BaseAdapter; 13 import android.widget.ImageView; 14 import android.widget.TextView; 15 16 /** 17 * 新闻适配器 18 * 19 * @author Administrator 20 * 21 */ 22 public class MessageAdapter extends BaseAdapter { 23 24 Context mContext; 25 LayoutInflater mInflater; 26 27 List<NewsBean> mData = null; 28 29 public MessageAdapter(Context context, List<NewsBean> list) { 30 mContext = context; 31 mInflater = LayoutInflater.from(mContext); 32 mData = list; 33 } 34 35 /** 36 * 增加数据源 37 * 38 * @param data 39 */ 40 public void AddData(List<NewsBean> list) { 41 for (NewsBean bean : list) { 42 this.mData.add(bean); 43 } 44 } 45 46 @Override 47 public int getCount() { 48 // TODO Auto-generated method stub 49 return mData.size(); 50 } 51 52 @Override 53 public NewsBean getItem(int position) { 54 // TODO Auto-generated method stub 55 return mData.get(position); 56 } 57 58 @Override 59 public long getItemId(int position) { 60 // TODO Auto-generated method stub 61 return position; 62 } 63 64 @Override 65 public View getView(int position, View convertView, ViewGroup parent) { 66 ViewHolder holder; 67 if (convertView == null) { 68 holder = new ViewHolder(); 69 convertView = mInflater.inflate(R.layout.item_layout, null); 70 holder.mImageView_Icon = (ImageView) convertView 71 .findViewById(R.id.ImageView_Icon); 72 holder.mTextView_Title = (TextView) convertView 73 .findViewById(R.id.TextView_Title); 74 holder.mTextView_Content = (TextView) convertView 75 .findViewById(R.id.TextView_Content); 76 convertView.setTag(holder); 77 78 } else { 79 holder = (ViewHolder) convertView.getTag(); 80 } 81 82 holder.mImageView_Icon.setImageResource(R.drawable.ic_launcher); 83 holder.mTextView_Title.setText(mData.get(position).getNewsTitle()); 84 holder.mTextView_Content.setText(mData.get(position).getNewsContent()); 85 86 return convertView; 87 } 88 89 class ViewHolder { 90 ImageView mImageView_Icon; 91 TextView mTextView_Title; 92 TextView mTextView_Content; 93 } 94 95 }
实体类↓
1 package com.wangzhen.bean; 2 3 /** 4 * 实体类 5 * 6 * @author Administrator 7 * 8 */ 9 public class NewsBean { 10 11 private String NewsImageURL; 12 private String NewsTitle; 13 private String NewsContent; 14 15 public String getNewsImageURL() { 16 return NewsImageURL; 17 } 18 19 public void setNewsImageURL(String newsImageURL) { 20 NewsImageURL = newsImageURL; 21 } 22 23 public String getNewsTitle() { 24 return NewsTitle; 25 } 26 27 public void setNewsTitle(String newsTitle) { 28 NewsTitle = newsTitle; 29 } 30 31 public String getNewsContent() { 32 return NewsContent; 33 } 34 35 public void setNewsContent(String newsContent) { 36 NewsContent = newsContent; 37 } 38 39 }
在PullToRefreshBase文件里要添加以下代码:
1 // 判别头部是否展示出来,如果展示出来代表下拉使得头部展示。true为下拉 2 public boolean isShownHeader() { 3 return getHeaderLayout().isShown(); 4 } 5 6 // 判别低部是否展示出来,如果展示出来代表上拉使得低部展示。true为上拉 7 public boolean isShownFooter() { 8 return getFooterLayout().isShown(); 9 }