Android:分页下载示例(PullToRefresh)
来源:互联网 发布:caffe推荐系统 编辑:程序博客网 时间:2024/05/16 18:22
此篇文章注释较少(下载数据使用的是Volley),如若有不解之处,
可以参考另一篇博客(下载数据使用的是Xutils):
《PullToRefresh下拉刷新,上拉分页,返回顶部》
package com.myapplication.newpagerrefreshlistview;import android.os.AsyncTask;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.text.TextUtils;import android.widget.ListView;import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.JSONArray;import com.alibaba.fastjson.JSONObject;import com.handmark.pulltorefresh.library.ILoadingLayout;import com.handmark.pulltorefresh.library.PullToRefreshBase;import com.handmark.pulltorefresh.library.PullToRefreshListView;import com.myapplication.newpagerrefreshlistview.VolleyUtils.MyDataUtils;import com.myapplication.newpagerrefreshlistview.VolleyUtils.StringCallBack;import com.myapplication.newpagerrefreshlistview.VolleyUtils.VolleyUtils;import org.json.JSONException;import java.util.ArrayList;import java.util.List;public class MainActivity extends AppCompatActivity { private PullToRefreshListView pullToRefreshListView; private String path = "http://api.fengniao.com/app_ipad/pic_bbs_list_v2." + "php?appImei=99000505856649&osType=Android&osVersion=4.1.1&fid=125&page="; //封装好的下载工具 private VolleyUtils volleyUtils; private List<Bean> totallist = new ArrayList<>(); private ListViewAdapter listViewAdapter; private int page = 1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); init(); getData(1); setPullListener(); } private void init() { volleyUtils = new VolleyUtils(); pullToRefreshListView = (PullToRefreshListView) findViewById(R.id.refresh_to_update_next_pager); //先设置拉动模式(常见3种), pullToRefreshListView.setMode(PullToRefreshBase.Mode.BOTH); //设置刷新界面,拿到刷新界面 ILoadingLayout loadingLayout = pullToRefreshListView.getLoadingLayoutProxy(true, true); //设置加载时候的图片 loadingLayout.setLoadingDrawable(getResources().getDrawable(R.mipmap.ic_launcher)); //最近更新,一般还要设置更新时间 loadingLayout.setLastUpdatedLabel(MyDataUtils.getCurrentDate()); //设置刷新时候的文字 loadingLayout.setRefreshingLabel("拼命加载中,莫捉急……"); //设置拉动和释放时候的文字 loadingLayout.setPullLabel("轻一点拉动,爱护屏幕……"); loadingLayout.setRefreshingLabel("释放中……"); listViewAdapter = new ListViewAdapter(this, totallist); pullToRefreshListView.setAdapter(listViewAdapter); } private void setPullListener() { pullToRefreshListView.setOnRefreshListener( new PullToRefreshBase.OnRefreshListener2<ListView>() { @Override public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) { //TODo 下拉时触发的事件 new GetDataTask().execute();//不加此行,刷新不会停止,有bug待解决 } @Override public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) { //TODO 上拉时触发的事件 page++; getData(page); new GetDataTask().execute();//不加此行,刷新不会停止,有bug待解决 } }); } public void getData(int page) { volleyUtils.getStringData(path + page, new StringCallBack() { @Override public void getStringData(String data) { //TODO json解析 //jsonToList(data); fastJsonToList(data); } }); } List<Bean> fastJsonToList(String s) { if (!TextUtils.isEmpty(s)) { JSONObject json = JSON.parseObject(s); JSONArray array = json.getJSONArray("list"); List<Bean> list = JSON.parseArray(array.toJSONString(), Bean.class); totallist.addAll(list); listViewAdapter.notifyDataSetChanged(); if (list.size() != 0) { return list; } } return null; } List<Bean> jsonToList(String s) { List<Bean> list = new ArrayList<>(); try { org.json.JSONObject object = new org.json.JSONObject(s); org.json.JSONArray array = object.getJSONArray("list"); for (int i = 0; i < array.length(); i++) { org.json.JSONObject j = array.getJSONObject(i); String pic_url = j.getString("pic_url"); String title = j.getString("title"); Bean bean = new Bean(); bean.setPic_url(pic_url); bean.setTitle(title); list.add(bean); } totallist.addAll(list); listViewAdapter.notifyDataSetChanged(); } catch (JSONException e) { e.printStackTrace(); } return list; } private class GetDataTask extends AsyncTask<Void, Void, List<Bean>> { @Override protected List<Bean> doInBackground(Void... params) { try { Thread.sleep(4000); } catch (InterruptedException e) { } return totallist; } @Override protected void onPostExecute(List<Bean> result) { listViewAdapter.notifyDataSetChanged(); pullToRefreshListView.onRefreshComplete(); super.onPostExecute(result); } }}
ListViewAdapter中代码:
package com.myapplication.newpagerrefreshlistview;import android.content.Context;import android.graphics.Bitmap;import android.view.View;import android.view.ViewGroup;import android.widget.ImageView;import android.widget.TextView;import com.myapplication.newpagerrefreshlistview.VolleyUtils.BitmapCallBack;import java.util.List;/** * Created by Administrator on 2016/3/8. */public class ListViewAdapter extends MyBaseAdapter<Bean> { public ListViewAdapter(Context context, List<Bean> list) { super(context, list); } @Override public View getItemView(int position, View convertView, ViewGroup parent) { final ViewHolder viewHolder; if (convertView == null) { convertView = inflater.inflate(R.layout.item, parent, false); viewHolder = new ViewHolder(); viewHolder.img = (ImageView) convertView.findViewById(R.id.iv_item_pic); viewHolder.txt = (TextView) convertView.findViewById(R.id.tv_item_txt); convertView.setTag(viewHolder); } else { viewHolder = (ViewHolder) convertView.getTag(); } //数据显示 Bean bean = list.get(position); viewHolder.txt.setText(bean.getTitle()); utils.getImageBitmap(bean.getPic_url(), new BitmapCallBack() { @Override public void getBitmap(Bitmap bitmap) { viewHolder.img.setImageBitmap(bitmap); } }); return convertView; } class ViewHolder { ImageView img; TextView txt; }}
1 0
- Android:分页下载示例(PullToRefresh)
- Android-PullToRefresh 分页请求网络数据的使用
- Android-PullToRefresh 分页请求网络数据的使用
- Android-PullToRefresh
- Android-PullToRefresh
- Android-PullToRefresh
- android PullToRefresh
- Android-PullToRefresh
- Android-PullToRefresh
- Android下载示例
- 分页+frament+PullToRefresh+轮播
- Android-PullToRefresh(二)Android-PullToRefresh详解
- android示例之文件下载
- Android下载文件示例代码
- Android PullToRefresh 分析之一、初识PullToRefresh
- Android PullToRefresh 分析之一、初识PullToRefresh
- Android-PullToRefresh学习笔记
- Android-PullToRefresh 使用心得
- 开始学习 Linux
- hibernate总结---hibernate简单使用
- 备份oracle数据脚本
- RM2016视觉开源OpenCv2代码
- 用户首选项
- Android:分页下载示例(PullToRefresh)
- Android studio 导入xutils3报错
- poj 3187 Backward Digit Sums(dfs暴搜)
- 三月八日问题记录
- Android中的属性动画(Property Animation)——Android开发艺术探索笔记
- 字符流小说 分页功能!
- 简单的求和题
- OSX 的文件系统终端命令
- 召回率和准确率