如今上拉刷新,下拉加载更多已经是浩如烟海的app的标配了

最近正好有相关的需要就去学习了一下,还是那句老话凡事都靠自己来

搞实在不是一件好事,费时费力不说可能还是在做无用功,不过自己研究学习

还是很有必要的。不多说我用到的第三方框架叫xlistview这是它的托管地址:

https://github.com/Maxwin-z/XListView-Android

下载下来以后

把解压出来的内容拷贝到自己的项目下(可以自己建一个包专门存放,我是这样做的)

要注意的是layout,String和drawable下也有几个对应的文件,这些也要考进去。

然后为listview写布局

注意:<com.xxxxxxx你自己的对应文件的位置xxx>

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" android:background="#f0f0f0"> <TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello" /> <com.example.guwie.yaoren.ui.view.XListView
android:id="@+id/xListView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:cacheColorHint="#00000000"> </com.example.guwie.yaoren.ui.view.XListView> </LinearLayout>
为布局文件写对应的java文件
public class TaskList extends AppCompatActivity implements XListView.IXListViewListener {

    //创建xlistview对象
private XListView mListView; //创建数据
List<ItemBean> dataList = new ArrayList<>();
private Object item; int page = 1;
int maxpage = 0; //用来执行耗时操作
private Handler mHandler; /**
* Called when the activity is first created.
*/
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.tasklist); //指定布局中的xlistview控件
mListView = (XListView) findViewById(R.id.xListView);
mListView.setPullLoadEnable(true);
mListView.setPullRefreshEnable(true); getTaskList(page);
mListView.setAdapter(new MyAdapter(TaskList.this, dataList)); mListView.setXListViewListener(this); mHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
switch (msg.what){
case 0x001:
Toast.makeText(TaskList.this , "已无更多数据" , Toast.LENGTH_SHORT).show();
break;
case 0x002:
Toast.makeText(TaskList.this , "未找到数据" , Toast.LENGTH_SHORT).show();
break;
}
}
};
} //获得数据后要执行onLoad()方法,否则刷新会一直进行停不下来 private void onLoad() { mListView.stopRefresh(); mListView.stopLoadMore(); mListView.setRefreshTime("刚刚"); } @Override
public void onRefresh() { dataList.clear();
page = 1;
mHandler.post(new Runnable() {//执行耗时操作
@Override
public void run() {
getTaskList(page);
mListView.setAdapter(new MyAdapter(TaskList.this, dataList));
}
});
onLoad();
Log.i("------------------", "onRefresh"); } @Override
public void onLoadMore() { mHandler.post(new Runnable() {
@Override
public void run() {
if(page < maxpage){ getTaskList(++page);
mListView.deferNotifyDataSetChanged(); }else{ Message msg = new Message();
msg.what=0x001;
mHandler.sendMessage(msg);
}
// getTaskList(++page);
// mListView.deferNotifyDataSetChanged();
//mListView.setAdapter(new MyAdapter(TaskList.this, dataList)); }
});
onLoad();
Log.i("------------------", "onLoadMore");
} /***
* 获取list数据 volley 方法 post string数据 得到 json数据 服务端由php编写
*  
* */
public void getTaskList(int pages) { Toast.makeText(TaskList.this , pages+"" , Toast.LENGTH_SHORT).show();
RequestQueue mreuestQueut = Volley.newRequestQueue(this); final Gson gson = new Gson(); JsonObjectRequest jsreq = new JsonObjectRequest(Request.Method.GET, TASK_LIST_DATE+"page="+pages, null,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject jsonObject) { Message msg = new Message(); try {
int code = jsonObject.getInt("code");
if(code == 200){ int size = jsonObject.getJSONArray("data").length();
for(int i=0; i<size ; i++){ JSONObject dataObject = jsonObject.getJSONArray("data").getJSONObject(i);
String title = dataObject.getString("title");
String price = dataObject.getString("fee");
String explain = dataObject.getString("description");
dataList.add(new ItemBean(title , explain , price , "3km"));
}
maxpage = ++page;
page = page-1;
}else if(code == 205){ //已无更多数据
//maxpage = page;
page = maxpage;
msg.what=0x001;
mHandler.sendMessage(msg); }else if(code == 404){
//未找到数据
msg.what = 0x002;
mHandler.sendMessage(msg);
} } catch (JSONException e) {
e.printStackTrace();
Log.i("----------------", "客户端内部错误");
}
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
Log.i("----------------","服务器出错"+volleyError.toString()); }
});
mreuestQueut.add(jsreq);
} }

这里的MyAdapter的方法是自定义的,详情请参考慕课网的徐大神的《Android必学-BaseAdapter的使用与优化》

上面方法中有关于volley的用法请自行百度
运行效果:

学习之处参考的demo:http://www.thinksaas.cn/group/topic/348557/

感谢作者

 
 

android第三方框架 xlistview 的使用的更多相关文章

  1. android 第三方框架

    1.视频:jcvideoplayer 2.圆角:cardview 3.圆形头像:circleimageview 4.加载网络图片:universalimageloader 5.网络请求:xutils ...

  2. 阿里P8大佬熬夜10天,把所有Android第三方库整理成了PDF

    缘起 随着互联网企业的不断发展,产品项目中的模块越来越多,用户体验要求也越来越高,想实现小步快跑.快速迭代的目的越来越难,还有应用之间的互相调用等等问题,插件化技术应用而生.如果没有插件化技术,美团. ...

  3. 第三方框架ViewPagerIndicator引入到Android Studio的方法总结

    原创文章,转载请注明出处http://www.cnblogs.com/baipengzhan/p/6286619.html 第三方框架ViewPagerIndicator实现的效果比较好,但当我们从G ...

  4. Android 项目中用得最多最火的第三方框架可能都在这里了

    分类 二级分类 框架名称 简介 Star 数 最近更新 UI 刷新 SmartRefreshLayout 智能下拉刷新框架 14k 18天 UI 刷新 Android-PullToRefresh 比较 ...

  5. Android开源框架——Picasso

    开篇——介绍Picasso (Picasso是什么?)Picasso:A Powerfull Image Downloading and Caching Library for Android,即An ...

  6. Android 第三方开源库收集整理(转)

    原文地址:http://blog.csdn.net/caoyouxing/article/details/42418591 Android开源库 自己一直很喜欢Android开发,就如博客签名一样,  ...

  7. 45.Android 第三方开源库收集整理(转)

    原文地址:http://blog.csdn.net/caoyouxing/article/details/42418591 Android开源库 自己一直很喜欢Android开发,就如博客签名一样,  ...

  8. Android MVVM框架RoboBinding初探

    RoboBinding是一个实现了数据绑定 Presentation Model(MVVM) 模式的Android开源框架.MVVM模式是MVC模式的重要更新,使得项目结构更加的优美,易于维护以及方便 ...

  9. Android网络框架Volley(体验篇)

    Volley是Google I/O 2013推出的网络通信库,在volley推出之前我们一般会选择比较成熟的第三方网络通信库,如: android-async-http retrofit okhttp ...

随机推荐

  1. 双核CPU,跑程序会报rcu_sched_state detected stalls on CPUs/tasks 错误

    有一份SDK,之前跑在PPC405EX上没问题。最近换平台,CPU使用了PowerPC的P1020,双核。linux版本也升级到了3.0.48版本。升级之后出现了一个问题:SDK里面的程序跑一段时间之 ...

  2. 解决Qt在openSUSE上编译出现“cannot find -lGL”错误

    在openSUSE上编译QT5.4程序出现“cannot find -lGL”,就连example都无法通过编译.QT是在官网下的最新的安装包. 大体意思是,缺少qt运行时所需要的openGL库.决绝 ...

  3. [To be translated] Nova:libvirt image 的生命周期

    翻译自:http://www.pixelbeat.org/docs/openstack_libvirt_images/ The main stages of a Virtual Machine dis ...

  4. MySQL Database on Azure 的用户名

    MySQL Database on Azure是中国版Windows Azure上的一个PaaS服务,类似于AWS上的RDS.MySQL Database on Azure的用户名与on-premis ...

  5. ios移动端切图及前端规范

    移动端IOS知识普及:IOS标准分辨率:1242px * 2208px 切片要求: 1.    设计稿是按标准分辨率1242X2208设计,图片资源尺寸则是3倍图尺寸,将整个设计图压缩成750X133 ...

  6. NYOJ-取石子

    (一) 描述一天,TT在寝室闲着无聊,和同寝的人玩起了取石子游戏,而由于条件有限,他/她们是用旺仔小馒头当作石子.游戏的规则是这样的.设有一堆石子,数量为N(1<=N<=1000000), ...

  7. 第10章 同步设备I/O和异步设备I/O(1)_常见设备及CreateFile函数

    10.1 打开和关闭设备 10.1.1 设备的定义——在Windows中可以与之进行通信的任何东西. (1)常见设备及用途 设备 用途 用来打开设备的函数 文件 永久存储任何数据 CreateFile ...

  8. HTML 学习笔记 CSS(选择器4)

    CSS 后代选择器 后代选择器(descendant selector)又称为包含选择器.后代选择器可以选择作为某元素后代的元素. 根据上下文选择元素 我们可以定义后代选择器来创建一些规则,使这些规则 ...

  9. two sample ttest & paired ttst

    来源:http://www.pinzhi.org/thread-1023-1-1.html 成对t检验Paired Test是对来自同一总体的样本,在不同条件影响下获取的2组样本进行分析,以评价不同条 ...

  10. salt基本原理

            转载自: 来自:http://tech.mainwise.cn/?p=438     说明:salt是一个异构平台基础设置管理工具(虽然我们通常只用在Linux上),使用轻量级的通讯器 ...