pulltorefresh下拉重新加载网络数据 配合xutils

转载http://blog.csdn.net/u012255016/article/details/45041629

(1)先去下载开源库

https://github.com

(2)导包

导入library包就行

(3)部分布局


  1. <com.handmark.pulltorefresh.library.PullToRefreshListView  
  2.         android:id="@+id/listView"  
  3.         android:layout_width="match_parent"  
  4.         android:layout_height="match_parent" />  

(4)核心代码

//测试的api


  1. public interface Api {  
  2.     public static final String URI = "http://api.mishi.cn/homePage/goods/?_method=GET&p-pv=1.0&p-apiv=2.0&cityCode=020&pageSize=10&lng=113.340459¤tPage=%d&lat=23.175758&city=广州市";  
  3.   
  4.     public static final String CLASSIFY_URI = "http://api.mishi.cn/categories/foreground/?_method=GET&p-pv=1.0&p-apiv=1.0";  
  5.   
  6. }  


  1. public class MainActivity extends Activity {  
  2.   
  3.       
  4.     @ViewInject(R.id.listView)  
  5.     private PullToRefreshListView listView;  
  6.   
  7.     private BitmapUtils bitmapUtils;  
  8.     private ContentAdapter adapter;  
  9.     private List<ResultList> totalList = new ArrayList<ResultList>();  
  10.   
  11.     private int page = 0;  
  12.   
  13.     @Override  
  14.     protected void onCreate(Bundle savedInstanceState) {  
  15.         super.onCreate(savedInstanceState);  
  16.         setContentView(R.layout.activity_main);  
  17.   
  18.         ViewUtils.inject(this);  
  19.   
  20.         bitmapUtils = new BitmapUtils(this);  
  21.         adapter = new ContentAdapter(MainActivity.this, totalList, bitmapUtils);  
  22.         listView.setAdapter(adapter);  
  23.   
  24.         setListView();  
  25.   
  26.         download(1);  
  27.   
  28.     }  
  29.   
  30.     /** 
  31.      * 设置PullToRefreshListView的属性 
  32.      */  
  33.     private void setListView() {  
  34.         // 设置PullToRefreshListView添加上拉和下拉的方式  
  35.         listView.setMode(Mode.BOTH);// 现在是两种都用的情况  
  36.   
  37.         // 在布局文件中通过添加属性(ptr:ptrAnimationStyle="rotate")控制加载图标的动画效果(旋转[rotate]  
  38.         // 翻转[flip])  
  39.   
  40.         // 修改刷新布局的参数  
  41.         /* 
  42.          * includeStart = true, includeEnd = false;表示获取下拉刷新的布局 
  43.          *  
  44.          * includeStart = false, includeEnd = true;表示获取上拉刷新的布局 
  45.          */  
  46.         ILoadingLayout freshLayout = listView  
  47.                 .getLoadingLayoutProxy(truefalse);  
  48.   
  49.         // 修改更新的时间,可以用于提示上次刷新是什么时候  
  50.         freshLayout.setLastUpdatedLabel("上次更新2015.4.14");  
  51.         // 修改更新的旋转图标  
  52.         // freshLayout.setLoadingDrawable(getResources().getDrawable(R.drawable.ic_launcher));  
  53.         // 设置下拉的文字  
  54.         freshLayout.setPullLabel("下拉刷新");  
  55.         // 松开的提示语  
  56.         freshLayout.setReleaseLabel("松开刷新");  
  57.         // 设置刷新的文字提示  
  58.         freshLayout.setRefreshingLabel("正在刷新,请稍等...");  
  59.         // 设置字体格式  
  60.         // freshLayout.setTextTypeface(Typeface.DEFAULT);  
  61.                /** 
  62. <span style="white-space:pre">        </span> * 给PullToRefreshListView添加headView 
  63. <span style="white-space:pre">        </span> */  
  64. <span style="white-space:pre">        </span>// 获取PullToRefreshListView中的ListView  
  65. <span style="white-space:pre">        </span>/*ListView list = listView.getRefreshableView(); 
  66. <span style="white-space:pre">        </span>//测试 
  67. <span style="white-space:pre">        </span>ImageView img = new ImageView(this); 
  68. <span style="white-space:pre">        </span>img.setImageResource(R.drawable.ic_launcher); 
  69. <span style="white-space:pre">        </span>list.addHeaderView(img);*/  
  70.         /** 
  71.          * 为PullToRefreshListView绑定监听器监听用户的下拉和上拉操作 
  72.          */  
  73.         listView.setOnRefreshListener(new OnRefreshListener2<ListView>() {  
  74.   
  75.             @Override  
  76.             // 下拉刷新  
  77.             public void onPullDownToRefresh(PullToRefreshBase refreshView) {  
  78.                 // 下拉刷新的逻辑代码  
  79.                 /* 
  80.                  * 1、清空数据集合中的原有的所有的数据 
  81.                  *  
  82.                  * 2、重新请求第一页数据,存入到数据集合中 
  83.                  *  
  84.                  * 3、通知UI展示新数据(notifyDataSetChanged) 
  85.                  *  
  86.                  * 4、通知刷新布局,数据加载完成 
  87.                  */  
  88.   
  89.                 // 1、清空数据集合中的原有的所有的数据  
  90.                 totalList.clear();  
  91.                 // 2、重新请求第一页数据,存入到数据集合中 3、通知UI展示新数据(notifyDataSetChanged)  
  92.                 download(1);  
  93.                 // 4、通知刷新布局,数据加载完成  
  94.                 listView.onRefreshComplete();  
  95.             }  
  96.   
  97.             @Override  
  98.             // 上拉加载  
  99.             public void onPullUpToRefresh(PullToRefreshBase refreshView) {  
  100.                 // 上拉加载的逻辑代码  
  101.                 /* 
  102.                  * 1、请求下一页数据 
  103.                  *  
  104.                  * 2、添加到数据集合中 
  105.                  *  
  106.                  * 3、通知UI展示新数据(notifyDataSetChanged) 
  107.                  *  
  108.                  * 4、通知刷新布局,数据加载完成 
  109.                  */  
  110.   
  111.                 // 1、请求下一页数据  
  112.                 page++;  
  113.                 // 2、添加到数据集合中 3、通知UI展示新数据(notifyDataSetChanged)  
  114.                 download(page);  
  115.                 // 4、通知刷新布局,数据加载完成  
  116.                 listView.onRefreshComplete();  
  117.   
  118.             }  
  119.         });  
  120.   
  121.     }  
  122.   
  123.     /** 
  124.      * 使用xUtils框架下载 
  125.      */  
  126.     private void download(int page) {  
  127.         // 创建xUtils工具类中HttpUtils对象  
  128.         HttpUtils httpUtils = new HttpUtils();  
  129.         // 拼接完整链接  
  130.         String uri = String.format(Api.URI, page);  
  131.         // 发送请求  
  132.         httpUtils.send(HttpMethod.GET, uri, new RequestCallBack<String>() {  
  133.   
  134.             @Override  
  135.             // 请求失败的处理  
  136.             public void onFailure(HttpException arg0, String arg1) {  
  137.                 Toast.makeText(MainActivity.this"网络异常", Toast.LENGTH_SHORT)  
  138.                         .show();  
  139.             }  
  140.   
  141.             @Override  
  142.             // 请求成功的处理  
  143.             public void onSuccess(ResponseInfo<String> info) {  
  144.   
  145.                 if (info.statusCode == 200) {  
  146.                     String json = info.result;  
  147.                     List<ResultList> list = ParJSON.getResultList(json);  
  148.                     totalList.addAll(list);  
  149.                     adapter.notifyDataSetChanged();  
  150.   
  151.                 } else {  
  152.                     Toast.makeText(MainActivity.this"数据获取失败",  
  153.                             Toast.LENGTH_SHORT).show();  
  154.                 }  
  155.   
  156.             }  
  157.         });  
  158.   
  159.     }  
  160. }  

(5)listView中有两种不同的视图

  1. public class ContentAdapter extends BaseAdapter {  
  2.   
  3.     private static final int ALBUM = 0;  
  4.     private static final int GOODS = 1;  
  5.   
  6.     private Context context;  
  7.   
  8.     private List<ResultList> list;  
  9.   
  10.     private BitmapUtils bitmapUtils;  
  11.   
  12.     public ContentAdapter(Context con, List<ResultList> list,  
  13.             BitmapUtils bitmapUtils) {  
  14.         this.context = con;  
  15.         this.list = list;  
  16.         this.bitmapUtils = bitmapUtils;  
  17.     }  
  18.   
  19.     @Override  
  20.     public int getCount() {  
  21.         return list.size();  
  22.     }  
  23.   
  24.     @Override  
  25.     public Object getItem(int arg0) {  
  26.         return list.get(arg0);  
  27.     }  
  28.   
  29.     @Override  
  30.     public long getItemId(int position) {  
  31.         return position;  
  32.     }  
  33.   
  34.     @Override  
  35.     public int getViewTypeCount() {  
  36.         return 2;  
  37.     }  
  38.   
  39.     @Override  
  40.     public int getItemViewType(int position) {  
  41.         if (list.get(position).getType().equals("ALBUM")) {  
  42.             return ALBUM;  
  43.         }  
  44.         return GOODS;  
  45.     }  
  46.   
  47.     @Override  
  48.     public View getView(int position, View view, ViewGroup parent) {  
  49.         ResultList rList = list.get(position);  
  50.         JSONObject content = null;  
  51.         try {  
  52.             content = new JSONObject(rList.getItemData());  
  53.         } catch (JSONException e) {  
  54.             e.printStackTrace();  
  55.         }  
  56.   
  57.         int type = getItemViewType(position);  
  58.         switch (type) {  
  59.         case ALBUM:  
  60.             ViewAlbumItem va = null;  
  61.             if (view == null) {  
  62.                 va = new ViewAlbumItem();  
  63.                 view = LayoutInflater.from(context).inflate(R.layout.albumitem,  
  64.                         null);  
  65.                 va.mainTitle = (TextView) view.findViewById(R.id.mainTitle);  
  66.                 va.subTitle = (TextView) view.findViewById(R.id.subTitle);  
  67.                 va.img_album = (ImageView) view.findViewById(R.id.img_album);  
  68.                 view.setTag(va);  
  69.             } else {  
  70.                 va = (ViewAlbumItem) view.getTag();  
  71.             }  
  72.             AlbumItem ai = JSON  
  73.                     .parseObject(content.toString(), AlbumItem.class);  
  74.             va.mainTitle.setText(ai.getMainTitle());  
  75.             va.subTitle.setText(ai.getSubTitle());  
  76.   
  77.             bitmapUtils.display(va.img_album, ai.getCoverUrl());  
  78.   
  79.             break;  
  80.         case GOODS:  
  81.             ViewGoodsItem vg = null;  
  82.             if (view == null) {  
  83.                 vg = new ViewGoodsItem();  
  84.                 view = LayoutInflater.from(context).inflate(R.layout.goodsitem,  
  85.                         null);  
  86.                 vg.chefIcon = (ImageView) view.findViewById(R.id.chefIcon);  
  87.                 vg.img_goods = (ImageView) view.findViewById(R.id.img_goods);  
  88.                 vg.name = (TextView) view.findViewById(R.id.name);  
  89.                 vg.shopName = (TextView) view.findViewById(R.id.shopName);  
  90.                 vg.distance = (TextView) view.findViewById(R.id.distance);  
  91.                 vg.desc = (TextView) view.findViewById(R.id.desc);  
  92.                 view.setTag(vg);  
  93.             } else {  
  94.                 vg = (ViewGoodsItem) view.getTag();  
  95.             }  
  96.   
  97.             GoodsItem gi = JSON  
  98.                     .parseObject(content.toString(), GoodsItem.class);  
  99.             vg.desc.setText(gi.getDesc());  
  100.             vg.name.setText(gi.getName());  
  101.   
  102.             try {  
  103.                 JSONArray picList = new JSONArray(gi.getPicList());  
  104.                 String url = picList.getJSONObject(0).getString("url");  
  105.   
  106.                 bitmapUtils.display(vg.img_goods, url);  
  107.   
  108.             } catch (JSONException e) {  
  109.                 e.printStackTrace();  
  110.             }  
  111.   
  112.             try {  
  113.                 JSONObject shop = new JSONObject(gi.getShop());  
  114.                 vg.shopName.setText(shop.getString("shopName"));  
  115.                 vg.distance.setText(shop.getString("distance"));  
  116.   
  117.                 bitmapUtils.display(vg.chefIcon, shop.getString("chefIcon"));  
  118.   
  119.             } catch (JSONException e) {  
  120.                 e.printStackTrace();  
  121.             }  
  122.   
  123.             break;  
  124.         }  
  125.   
  126.         return view;  
  127.     }  
  128.   
  129.     public class ViewAlbumItem {  
  130.         private TextView mainTitle, subTitle;  
  131.         private ImageView img_album;  
  132.     }  
  133.   
  134.     public class ViewGoodsItem {  
  135.         private ImageView img_goods, chefIcon;  
  136.         private TextView name, shopName, distance, desc;  
  137.     }  
  138.   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
后台采用apache服务器下的cgi处理c语言做微信小程序后台逻辑的脚本映射。PC端的服务器和客户端都是基于c语言写的。采用mysql数据库进行用户数据和聊天记录的存储。.zip C语言是一种广泛使用的编程语言,它具有高效、灵活、可移植性强等特点,被广泛应用于操作系统、嵌入式系统、数据库、编译器等领域的开发。C语言的基本语法包括变量、数据类型、运算符、控制结构(如if语句、循环语句等)、函数、指针等。下面详细介绍C语言的基本概念和语法。 1. 变量和数据类型 在C语言中,变量用于存储数据数据类型用于定义变量的类型和范围。C语言支持多种数据类型,包括基本数据类型(如int、float、char等)和复合数据类型(如结构体、联合等)。 2. 运算符 C语言中常用的运算符包括算术运算符(如+、、、/等)、关系运算符(如==、!=、、=、<、<=等)、逻辑运算符(如&&、||、!等)。此外,还有位运算符(如&、|、^等)和指针运算符(如、等)。 3. 控制结构 C语言中常用的控制结构包括if语句、循环语句(如for、while等)和switch语句。通过这些控制结构,可以实现程序的分支、循环和多路选择等功能。 4. 函数 函数是C语言中用于封装代码的单元,可以实现代码的复用和模块化。C语言中定义函数使用关键字“void”或返回值类型(如int、float等),并通过“{”和“}”括起来的代码块来实现函数的功能。 5. 指针 指针是C语言中用于存储变量地址的变量。通过指针,可以实现对内存的间接访问和修改。C语言中定义指针使用星号()符号,指向数组、字符串和结构体等数据结构时,还需要注意数组名和字符串常量的特殊性质。 6. 数组和字符串 数组是C语言中用于存储同类型数据的结构,可以通过索引访问和修改数组中的元素。字符串是C语言中用于存储文本数据的特殊类型,通常以字符串常量的形式出现,用双引号("...")括起来,末尾自动添'\0'字符。 7. 结构体和联合 结构体和联合是C语言中用于存储不同类型数据的复合数据类型。结构体由多个成员组成,每个成员可以是不同的数据类型;联合由多个变量组成,它们共用同一块内存空间。通过结构体和联合,可以实现数据的封装和抽象。 8. 文件操作 C语言中通过文件操作函数(如fopen、fclose、fread、fwrite等)实现对文件的读写操作。文件操作函数通常返回文件指针,用于表示打开的文件。通过文件指针,可以进行文件的定位、读写等操作。 总之,C语言是一种功能强大、灵活高效的编程语言,广泛应用于各种领域。掌握C语言的基本语法和数据结构,可以为编程学习和实践打下坚实的基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值