android第三方框架 xlistview 的使用
如今上拉刷新,下拉加载更多已经是浩如烟海的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的使用与优化》


学习之处参考的demo:http://www.thinksaas.cn/group/topic/348557/
感谢作者
android第三方框架 xlistview 的使用的更多相关文章
- android 第三方框架
1.视频:jcvideoplayer 2.圆角:cardview 3.圆形头像:circleimageview 4.加载网络图片:universalimageloader 5.网络请求:xutils ...
- 阿里P8大佬熬夜10天,把所有Android第三方库整理成了PDF
缘起 随着互联网企业的不断发展,产品项目中的模块越来越多,用户体验要求也越来越高,想实现小步快跑.快速迭代的目的越来越难,还有应用之间的互相调用等等问题,插件化技术应用而生.如果没有插件化技术,美团. ...
- 第三方框架ViewPagerIndicator引入到Android Studio的方法总结
原创文章,转载请注明出处http://www.cnblogs.com/baipengzhan/p/6286619.html 第三方框架ViewPagerIndicator实现的效果比较好,但当我们从G ...
- Android 项目中用得最多最火的第三方框架可能都在这里了
分类 二级分类 框架名称 简介 Star 数 最近更新 UI 刷新 SmartRefreshLayout 智能下拉刷新框架 14k 18天 UI 刷新 Android-PullToRefresh 比较 ...
- Android开源框架——Picasso
开篇——介绍Picasso (Picasso是什么?)Picasso:A Powerfull Image Downloading and Caching Library for Android,即An ...
- Android 第三方开源库收集整理(转)
原文地址:http://blog.csdn.net/caoyouxing/article/details/42418591 Android开源库 自己一直很喜欢Android开发,就如博客签名一样, ...
- 45.Android 第三方开源库收集整理(转)
原文地址:http://blog.csdn.net/caoyouxing/article/details/42418591 Android开源库 自己一直很喜欢Android开发,就如博客签名一样, ...
- Android MVVM框架RoboBinding初探
RoboBinding是一个实现了数据绑定 Presentation Model(MVVM) 模式的Android开源框架.MVVM模式是MVC模式的重要更新,使得项目结构更加的优美,易于维护以及方便 ...
- Android网络框架Volley(体验篇)
Volley是Google I/O 2013推出的网络通信库,在volley推出之前我们一般会选择比较成熟的第三方网络通信库,如: android-async-http retrofit okhttp ...
随机推荐
- KEIL MDK STM32如何建立工程
2. 3 4 5 6 7 QQ 463431476 8 9
- [转]SQL 操作结果集 -并集、差集、交集、结果集排序
本文转自:http://www.cnblogs.com/kissdodog/archive/2013/06/24/3152743.html 操作结果集 为了配合测试,特地建了两个表,并且添加了一些测试 ...
- JAVA bio nio aio
[转自]http://qindongliang.iteye.com/blog/2018539 在高性能的IO体系设计中,有几个名词概念常常会使我们感到迷惑不解.具体如下: 序号 问题 1 什么是同步? ...
- Android View和ViewGroup
View和ViewGroup Android的UI界面都是由View和ViewGroup及其派生类组合而成的. 其中,View是所有UI组件的基类,而 ViewGroup是容纳这些组件的容器,其本身也 ...
- Svn Patch 中文乱码
关于Patch svn打patch的介绍:巧用svn create patch(打补丁)方案解决定制版需求 svn创建patch 1.在SVN的提交列表中,右键选择“创建补丁” 2.选择保存位置,保存 ...
- Eclipse仿Visual AssistX 编辑着色插件
1. 风格下载 http://www.eclipsecolorthemes.org/?view=theme&id=4602 2. 风格的安装与卸载 http://www.cnblogs.com ...
- 深入了解Windows
1.1.什么是WindowMicrosoft Windows,是美国微软公司研发的一套操作系统,它问世于1985年,起初仅仅是Microsoft-DOS模拟环境,后续的系统版本由于微软不断的更新升级, ...
- proxy改变this指向
var core_slice = Array.prototype.slice; var proxy = function(context,fn) { var args, proxy; if ( typ ...
- 千位分隔符(js 实现)
最近被同事问到js如何实现给长数字添加千位分隔符,即 1344444 ---> 13,444,444 这是一个很常见的前端面试题.看起来简单,刚开始我都懒得写. 仔细一想,挺考逻辑的,实现方法有 ...
- 傅盛:如何快慢“炼”金山?(转)
原文地址:http://www.huxiu.com/article/16052/1.html 一直以来,金山都不是一家"大公司",从前不是,现在也不是. 能够掰着指头数完腾讯六大事 ...
为布局文件写对应的java文件