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 ...
随机推荐
- Flash Download Failed-"Cortex-M3"
rror:Flash Download Failed-"Cortex-M3"出现一般有两种情况: 1.SWD模式下,Debug菜单中,Reset菜单选项(Autodetect/HW ...
- linux 文件管理以及其相关指令
Linux简介 严格的来讲,Linux 不算是一个操作系统,只是一个 Linux 系统中的内核, 即计算机软件与硬件通讯之间的平台:Linux的全称是GNU/Linux,这才算是一个真正意义上的Lin ...
- 没学过CSS等前端的我,也想美化一下自己的博客
随便说几句: 自己一直学的都是 C++和 Java 以及 Python语言,根本不懂高大上的 CSS 和 著名的 HTML5.感觉那些能自己设计那么漂亮的博客的朋友都好厉害.可以自己加上博客公告栏的小 ...
- Assembly - Registers
Processor operations mostly involve processing data. This data can be stored in memory and accessed ...
- 理解 OpenStack Swift (2):架构、原理及功能 [Architecture, Implementation and Features]
本系列文章着重学习和研究OpenStack Swift,包括环境搭建.原理.架构.监控和性能等. (1)OpenStack + 三节点Swift 集群+ HAProxy + UCARP 安装和配置 ( ...
- [转]TextArea设置MaxLength属性最大输入值的js代码
标准的DHTML文档中TEXTAREA的MAXLENGTH属性默认情况下不起作用,只有当事件发生时才起作用 如下:http://spiderscript.net/site/spiderscript/e ...
- 第29章 跨战区大PK
29.1 策略模式 VS 桥梁模式 29.1.1 策略模式 [编程实验]用策略模式实现邮件发送 (1)有文本和超文本两种格式的邮件,将这两种格式封装成两种不同的发送策略. (2)文本邮件和超文本邮件分 ...
- GitHub 下载文件夹
工具 TortoiseSVN 步骤 1.打开要下载的项目,选中要下载的文件夹,右键 选择 复制链接地址 2.把链接中的 tree/master 改成 trunk ,(trunk是master分支,可以 ...
- 【Unity3d】Ray射线初探-射线的原理及用法
http://www.xiaobao1993.com/231.html 射线是一个无穷的线,开始于origin并沿着direction方向. 当射线碰到物体后.它就会停止发射. 在屏幕中拉一个CUBE ...
- UNITY3D单词学习 speed和velocity的区别
在日常用语中,这两个词没有区别,可以通用. 而在物理学里,velocity 是一个矢量(vector quantity)表示起点与终点间直线距离的长度除以所用时间所得的量,并注明方向;而 speed ...
为布局文件写对应的java文件