【Android】Handler的应用(三):从服务器端分页加载更新ListView
在前面两节中,我们了解了如何从服务器中加载JSON数据。
现在,我们将把服务器中的JSON数据加载更新到ListView。
并且,结合之前博文的 “动态追加分页ListView数据”的相关知识,实现将服务器中的分页JSON数据,填充到ListView中。
回顾
以BaseAdapter做适配器的ListView:http://blog.csdn.net/jueblog/article/details/12114513
ListView内数据的动态追加:http://blog.csdn.net/jueblog/article/details/12148259
Activity的实现
package com.app.myhandler; import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject; import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.AdapterContextMenuInfo;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast; import com.app.adapter.MyWeixinJSON;
import com.app.util.MyApplication;
import com.app.util.MyThread; /**
* 点击 追加数据的ListView
* @author 402-9
*/
public class ListViewPage extends Activity {
private ListView lv;
private MyWeixinJSON mJson;
private JSONArray mData = new JSONArray();// JSON数据源
private View view_page_footer;// 底部视图
private int page = 1;// 加载页码
private int totalPage;// 总数据
private String url = new String("http://192.168.8.4/wt_guang.php?frm=3g&cid=100");
private TextView text_page; private Handler handler = new Handler() {
public void handleMessage(android.os.Message msg) {
try {
String result = msg.obj.toString();
JSONObject object = new JSONObject(result);
totalPage = (Integer) object.get("totalPage");
if(mJson==null) {
mData = (JSONArray) object.get("items");
mJson = new MyWeixinJSON(mData, ListViewPage.this);
lv.setAdapter(mJson);//为ListView绑定适配器
} else {
mData = MyApplication.joinJSONArray(mData, (JSONArray) object.get("items"));
mJson.setList(mData);
mJson.notifyDataSetChanged();
}
text_page.setText("下一页");
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
};
}; @Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.weixin);
lv = (ListView) findViewById(R.id.lv); new MyThread(handler, url.toString(), 1).start(); view_page_footer = LayoutInflater.from(this).inflate(R.layout.view_page_footer, null);
lv.addFooterView(view_page_footer);// 添加底部视图
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// TODO Auto-generated method stub
try {
JSONObject jsonObject = (JSONObject) mData.get(position);
Toast.makeText(ListViewPage.this,
jsonObject.getString("title"), Toast.LENGTH_SHORT)
.show();
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}); text_page = (TextView) view_page_footer.findViewById(R.id.text_page);
text_page.setOnClickListener(new View.OnClickListener() {
// 点击按钮 追加数据 并通知适配器
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
page++;
if(page<=totalPage) {
text_page.setText("正在加载中...");
new MyThread(handler, url+"&p="+page, 1).start();
} else {
text_page.setText("已是最末页...");
text_page.setEnabled(false);
}
}
});
}
}
mData = MyApplication.joinJSONArray(mData, (JSONArray) object.get("items"));
所调用的方法为 http://blog.csdn.net/jueblog/article/details/12622423中提供的方法。
适配器的修改
package com.app.adapter; import org.json.JSONArray;
import org.json.JSONObject; import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView; import com.app.myhandler.R; public class MyWeixinJSON extends BaseAdapter {
private LayoutInflater mInflater;// 动态布局映射
private JSONArray list;
private Context context;
// private int i = 0; public void setList(JSONArray list) {
this.list = list;
} public MyWeixinJSON(JSONArray list, Context context) {
this.list = list;
this.context = context;
this.mInflater = LayoutInflater.from(context);
} @Override
public int getCount() {
// TODO Auto-generated method stub
return list.length();
} @Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
} @Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
} @Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
// System.out.println("正在渲染第"+position+"行 +++ "+ i++);
OneView oneView;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.item_weixin, null);// 根据布局文件实例化view
oneView = new OneView();
oneView.title = (TextView) convertView.findViewById(R.id.title);// 找某个控件
oneView.time = (TextView) convertView.findViewById(R.id.time);
oneView.info = (TextView) convertView.findViewById(R.id.info);
oneView.img = (ImageView) convertView.findViewById(R.id.img);
convertView.setTag(oneView);// 把View和某个对象关联起来
} else {
oneView = (OneView) convertView.getTag();
}
JSONObject jObject = null;
try {
jObject = list.getJSONObject(position);// 根据position获取集合类中某行数据
oneView.title.setText(jObject.get("itemID").toString());// 给该控件设置数据(数据从集合类中来)
oneView.time.setText(jObject.get("price").toString());
oneView.info.setText(jObject.get("title").toString());
oneView.img.setBackgroundResource(R.drawable.special_spring_head2);
// oneView.img.setImageDrawable(Drawable.createFromStream(new
// URI(jObject.getString("pic_url"))., "src"));
} catch (Exception e) {
// TODO: handle exception
}
return convertView;
} /** 把每行布局文件的各个控件包装成一个对象 */
private class OneView {
TextView title;
TextView time;
TextView info;
ImageView img;
}
}
JSON数据
{
"totalCount": 9,
"totalPage": 2,
"items": [
{
"itemID": "13889239752",
"title": "PEACE DOVE 正品* 真兔毛 范儿厚毛衣开衫 清库价",
"pic_url": "http://img01.taobaocdn.com/bao/uploaded/i5/T1ELuGXj0yXXbAjkA._083138.jpg",
"click_url": "http://item.taobao.com/item.htm?id=13889239752",
"price": "98.00",
"promotion_price": "0.00",
"liked": "0"
},
{
"itemID": "13357878044",
"title": "现货 呛口小辣椒11月29日香港行snidel 翻领双排扣毛呢大衣外套",
"pic_url": "http://img03.taobaocdn.com/bao/uploaded/i3/T1KTWDXipfXXXmSFDX_113804.jpg",
"click_url": "http://item.taobao.com/item.htm?id=13357878044",
"price": "278.00",
"promotion_price": "0.00",
"liked": "0"
},
{
"itemID": "12740033159",
"title": "2011新款呛口小辣椒子萱王翔貉子毛毛领军绿色工装棉服棉衣大衣",
"pic_url": "http://img01.taobaocdn.com/bao/uploaded/i1/T1WiCoXi4BXXad.Qs9_073952.jpg",
"click_url": "http://item.taobao.com/item.htm?id=12740033159",
"price": "628.00",
"promotion_price": "0.00",
"liked": "0"
},
{
"itemID": "8603809978",
"title": "圣诞款大衣 三色入",
"pic_url": "http://img01.taobaocdn.com/bao/uploaded/i1/T1GWXTXhhxXXaMGqo3_045745.jpg",
"click_url": "http://s.click.taobao.com/t_8?e=7HZ6jHSTZTlU5Xur%2B%2F50d2poSR5Ba0A%2Fi8tpiW6m04z%2BWKzb6yELcZsJq6zxF7EMTqmpst%2FNOGepsZQvjjXKR0huW7F8S1whVzYKzICAu1lT&p=mm_10009952_0_0",
"price": "165.00",
"promotion_price": "0.00",
"liked": "0"
},
{
"itemID": "10629952619",
"title": "裁诺 春装新款2012女装 韩版带帽中长款加厚卫衣 女 秋冬外套大码",
"pic_url": "http://img01.taobaocdn.com/bao/uploaded/i1/T1PASfXfpoXXc.O0vb_093452.jpg",
"click_url": "http://item.taobao.com/item.htm?id=10629952619",
"price": "158.00",
"promotion_price": "0.00",
"liked": "0"
},
{
"itemID": "9158721999",
"title": "清仓包邮 出口欧美大码超酷水洗打磨斜开襟修身加厚抓绒卫衣外套",
"pic_url": "http://img03.taobaocdn.com/bao/uploaded/i3/T12t5KXXJqXXbjSw.8_100610.jpg",
"click_url": "http://s.click.taobao.com/t_8?e=7HZ6jHSTZPhaK%2FmBeumaH2YuQWkORNRTfXSCf08v9iowvo%2F0Akhswsb9gfNlScFQL%2Bc%2Bp%2BFUQiV5QW7qQyiq%2BJQ4CS399exvrZIKVVH3ZZNULw%3D%3D&p=mm_10009952_0_0",
"price": "398.00",
"promotion_price": "0.00",
"liked": "0"
}
]
}
效果图
【Android】Handler的应用(三):从服务器端分页加载更新ListView的更多相关文章
- ListView实现分页加载(三)实现分页加载
在上一篇中,我们实现了底部布局(即带上了进度条).没有读过的朋友可以点击下面的链接: http://www.cnblogs.com/fuly550871915/p/4866966.html 但是进度条 ...
- Android中获取网络数据时的分页加载
//此实在Fragment中实现的,黄色部分为自动加载,红色部分是需要注意的和手动加载, 蓝色部分是睡眠时间,自我感觉不用写 ,还有就是手动加载时,不知道为什么进去后显示的就是最后一行,求大神 ...
- Android为TV端助力 转载:RecyclerView分页加载
package com.android.ryane.pulltoloaddata_recyclerview; import android.os.Handler;import android.os.L ...
- Android 图片从网页中获取并动态加载到listview中
实现功能: 效果图: 代码:这里
- Android基本控件之listView(三)<用ListView实现分页加载>
我们之前讨论了ListView的基本使用方法和ListView的优化 今天我们再来讨论一个关于ListView的一个新的东西~就是分页加载.那么什么是分页加载呢?简单点说,就是"下拉刷新&q ...
- java攻城狮之路(Android篇)--widget_webview_metadata_popupwindow_tabhost_分页加载数据_菜单
一.widget:桌面小控件1 写一个类extends AppWidgetProvider 2 在清单文件件中注册: <receiver android:name=".ExampleA ...
- Android三种基本的加载网络图片方式(转)
Android三种基本的加载网络图片方式,包括普通加载网络方式.用ImageLoader加载图片.用Volley加载图片. 1. [代码]普通加载网络方式 ? 1 2 3 4 5 6 7 8 9 10 ...
- Android中ListView分页加载数据
public class MainActivity extends Activity { private ListView listView=null; //listview的数据填充器 privat ...
- 【Android进阶】Listview分页加载数据的实现
Listview分页加载数据的实现 public class MainActivity extends Activity { protected static final int SUCCESS_GE ...
随机推荐
- HDU 3492 (直线与所有线段相交) Segment
题意: 给出n个线段,判断是否存在一条直线使得所有线段在直线上的射影的交非空. 分析: 如果我们找到一条与所有线段相交的直线,然后做一条与该直线垂直的直线,这些线段在直线上的射影就一定包含这个垂足. ...
- Java [Leetcode 229]Bulls and Cows
题目描述: You are playing the following Bulls and Cows game with your friend: You write down a number an ...
- <九>面向对象分析之UML核心元素之设计类,类,属性,方法,可见性
设计类
- 一天一个Java基础——反射
1.概念 反射主要是指程序可以访问,检测和修改它本身的状态或行为的一种能力 Java中的反射是一种强大的工具,它能够创建灵活的代码,这些代码可以运行时装配,无须在组件之间进行链接 反射允许在编写与执行 ...
- 【转】Windows环境下Android Studio v1.0安装教程
原文网址:http://ask.android-studio.org/?/article/9 http://android-studio.org/index.php/docs/experience/1 ...
- Zend Framework 入门(2)—多国语言支持
如果你的项目想要支持多语言版本,那么就需要用到 Zend_Translate.Zend_Translate 的详细文档在这里,不过如果想偷懒的话,也很简单,在View Helpers 文档中介绍了如何 ...
- 自己动手写路由器之ioctl获取网络接口信息
最近打算写一个简单路由器,里面有用到ioctl获取网络接口信息,那就先把这部分单独拿出来说一说吧! ioctl这个函数,可以用来对特殊文件的基础设备参数进行操作,它们可以完成与打开文件描述符相关联的控 ...
- mysql-5.6.15_winX64在win764位系统下的安装操作步骤总结
mysql 版权声明:本文为博主原创文章,未经博主允许不得转载. 自从换了新电脑win764位,支持的内存从原来的3G(2G机身+1G内存条)变到了现在的8G(机身4G+4G内存条),机子的速度是 ...
- 【LeetCode 215】Kth Largest Element in an Array
Find the kth largest element in an unsorted array. Note that it is the kth largest element in the so ...
- 提取数字、英文、中文、过滤重复字符等SQL函数(含判断字段是否有中文)
--SQL 判断字段值是否有中文 create function fun_getCN(@str nvarchar(4000)) returns nvarchar(4000) a ...