xlistview的使用
//mian方法
import android.os.Handler; import android.os.Message; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import com.example.xlistview.Bean.DataDataBean; import com.example.xlistview.Utils.MyTask; import com.example.xlistview.adapter.MyAdapter; import com.example.xlistview.view.XListView; import com.google.gson.Gson; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; public class MainActivity extends AppCompatActivity { private List<DataDataBean.DataBean> lists = new ArrayList<DataDataBean.DataBean>(); private XListView xListview; private MyAdapter myAdapter; private int pageIndex = 1; private Handler handler = new Handler() { @Override public void handleMessage(Message msg) { if (msg.what == 1) { xListview.stopLoadMore();//关闭底部视图 } else { Date date = new Date(System.currentTimeMillis()); //yyyy-MM-dd HH:mm:ss SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH:mm"); String updateTime = simpleDateFormat.format(date); //设置刷新时间 xListview.setRefreshTime(updateTime); xListview.stopRefresh();//关闭头部视图 } } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //找控件 xListview = (XListView) findViewById(R.id.xlv); //支持下拉刷新 xListview.setPullRefreshEnable(true); //支持上拉加载更多 xListview.setPullLoadEnable(true); //设置监听事件 xListview.setXListViewListener(new XListView.IXListViewListener() { @Override public void onRefresh() {//刷新回调接口 //请求第一页的数据 MyTask myTask = new MyTask(new MyTask.Icallbacks() { @Override public void updataUiByjson(String jsonstr) { Gson gson = new Gson(); DataDataBean bean = gson.fromJson(jsonstr, DataDataBean.class); //添加到集合中 lists.addAll(0, bean.getData()); //设置适配器 setAdapter(); //延迟关闭头部视图 handler.sendEmptyMessageDelayed(2, 500); } }); myTask.execute("http://www.yulin520.com/a2a/impressApi/news/mergeList?pageSize=10&page=1"); } @Override public void onLoadMore() { //加载更多回调的接口 pageIndex++; Log.i("zzz", "*****"); MyTask myTask = new MyTask(new MyTask.Icallbacks() { @Override public void updataUiByjson(String jsonstr) { Gson gson = new Gson(); DataDataBean bean = gson.fromJson(jsonstr, DataDataBean.class); //将最新请求的数据添加到大集合对象中, lists.addAll(bean.getData()); //设置适配器 setAdapter(); //关闭底部视图 handler.sendEmptyMessageDelayed(1, 500); } }); myTask.execute("http://www.yulin520.com/a2a/impressApi/news/mergeList?pageSize=10&page=" + pageIndex); } }); //初始化 requestNetData(); } private void requestNetData() { MyTask myTask = new MyTask(new MyTask.Icallbacks() { @Override public void updataUiByjson(String jsonstr) { Gson gson = new Gson(); DataDataBean bean = gson.fromJson(jsonstr, DataDataBean.class); //添加到大集合对象中 lists.addAll(bean.getData()); //设置适配器 setAdapter(); } }); myTask.execute("http://www.yulin520.com/a2a/impressApi/news/mergeList?pageSize=10&page=1"); } public void setAdapter() { if (myAdapter == null) { myAdapter = new MyAdapter(this, lists); xListview.setAdapter(myAdapter); } else { myAdapter.notifyDataSetChanged(); } } }
//适配器
package com.example.xlistview.adapter; import android.content.Context; import android.graphics.Bitmap; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.TextView; import com.example.xlistview.Bean.DataDataBean; import com.example.xlistview.R; import com.example.xlistview.Utils.ImageLoaderUtlis; import com.nostra13.universalimageloader.core.DisplayImageOptions; import com.nostra13.universalimageloader.core.ImageLoader; import java.util.List; /** * Created by 知足 on 2017/10/13. */ public class MyAdapter extends BaseAdapter{ Context context; List<DataDataBean.DataBean> list; /*private DisplayImageOptions options;*/ public MyAdapter(Context context, List<DataDataBean.DataBean> list) { this.context = context; this.list = list; /*options=new DisplayImageOptions.Builder() .cacheInMemory(true)//使用内存缓存 .cacheOnDisk(true)//使用磁盘缓存 .showImageOnLoading(R.mipmap.ic_launcher)//设置正在下载的图片 .showImageForEmptyUri(R.mipmap.ic_launcher)//url为空或请求的资源不存在时 .showImageOnFail(R.mipmap.ic_launcher)//下载失败时显示的图片 .bitmapConfig(Bitmap.Config.RGB_565)//设置图片格式 .build();*/ } @Override public int getCount() { return list.size(); } @Override public Object getItem(int position) { return list.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder; if(convertView==null){ convertView= View.inflate(context, R.layout.item_layout, null); holder=new ViewHolder(); holder.textView= (TextView) convertView.findViewById(R.id.text_title); holder.imageView= (ImageView) convertView.findViewById(R.id.image_view); convertView.setTag(holder); }else{ holder= (ViewHolder) convertView.getTag(); } holder.textView.setText(list.get(position).getTitle()); ImageLoader.getInstance().displayImage(list.get(position).getImg(),holder.imageView, ImageLoaderUtlis.imageOptions()); return convertView; } class ViewHolder{ ImageView imageView; TextView textView; } }
//Beanbao解析的数据
public class DataDataBean { /** * code : 1 * success : true * height : 0 * width : 0 * data : [{"userAge":33,"introduction":"83年/巨蟹座/ 开朗幽默,热情善良,追求刺激/喜欢温柔,体贴,可爱,善良的女孩/金融","replyTimes":17,"url":"http://www.yulin520.com/a2a/h5/impress/i1/334?a=1507892610999","createTime":1466160199000,"hxKey":"60fd9c2377f81ba1ccca450fb794e016","img":"http://img1.yulin520.com/news/HPUCVP74IFR0OKCZ9QQH.jpg#405_304","yulin":"81373","star":58,"title":"刘峰鸣 :能文能武,Call Me峰鸣哥","occupation":"证劵投资","userImg":"http://img1.yulin520.com/news/HPUCVP74IFR0OKCZ9QQH.jpg#405_304","impressEditId":334,"impressType":0,"topTime":1469503026000,"recommend":0,"remark":"","click":0,"userName":"刘LLL","source":0,"reporter":0,"status":1,"content":""},{"userAge":25,"introduction":"91年/处女座/性格直白,爱好广泛,有点女汉子/喜欢性格开朗,三观契合,高冷文艺范,有肌肉,175+/公司职业","replyTimes":12,"url":"http://www.yulin520.com/a2a/h5/impress/i1/319?a=1507892610999","createTime":1465380170000,"hxKey":"dac884f7cc81691ba28a004091cbe122","img":"http://img1.yulin520.com/news/BPKZUX0MNFR0OT0WLCOD.png#598_450","yulin":"80821","star":77,"title":"刘佳怡 :直白女汉子也有个文艺梦","occupation":"保险","userImg":"http://img1.yulin520.com/news/BPKZUX0MNFR0OT0WLCOD.png#598_450","impressEditId":319,"impressType":0,"topTime":1469503022000,"recommend":0,"remark":"","click":0,"userName":"嘉咦咦咦","source":0,"reporter":0,"status":1,"content":""},{"userAge":29,"introduction":"87年/处女座/善良可爱,安静温柔,爱独立思考/喜欢三观相似,经历相似,性格活泼的女孩/互联网设计师 ","replyTimes":13,"url":"http://www.yulin520.com/a2a/h5/impress/i1/324?a=1507892610999","createTime":1465722569000,"hxKey":"ebf75ccd1fba85f248988d40e572914e","img":"http://img1.yulin520.com/news/UPPN83L0IFR0OBC1A4AK.jpg#800_600","yulin":"80569","star":52,"title":"陈松 :爱搞新花样的设计师","occupation":"互联网","userImg":"http://img1.yulin520.com/news/UPPN83L0IFR0OBC1A4AK.jpg#800_600","impressEditId":324,"impressType":0,"topTime":1468980785000,"recommend":0,"remark":"","click":0,"userName":"Song","source":0,"reporter":0,"status":1,"content":""},{"userAge":26,"introduction":"90年/天蝎座/爱美食,爱分享,有点内向/喜欢阳光,干净,175+的男孩子/银行接待","replyTimes":16,"url":"http://www.yulin520.com/a2a/h5/impress/i1/323?a=1507892610999","createTime":1465721939000,"hxKey":"580786532670bc072b0aeb795bd6ddc7","img":"http://img1.yulin520.com/news/SPPW8T9QHFR0OM3HID0X.jpg#1280_960","yulin":"80983","star":101,"title":"秦心 :外形不娇小,心思很细腻","occupation":"银行","userImg":"http://img1.yulin520.com/news/SPPW8T9QHFR0OM3HID0X.jpg#1280_960","impressEditId":323,"impressType":0,"topTime":1468980773000,"recommend":0,"remark":"","click":0,"userName":"秦心","source":0,"reporter":0,"status":1,"content":""},{"userAge":23,"introduction":"93年/水瓶座/温柔体贴,踏实细心/喜欢三观相符的女孩子/前端工程师","replyTimes":17,"url":"http://www.yulin520.com/a2a/h5/impress/i1/337?a=1507892610999","createTime":1466162998000,"hxKey":"37dee7aaed1862c64c4fe38d75ccd52a","img":"http://img1.yulin520.com/news/XPW8OZXMSFR0O015UA7D.jpg#598_597","yulin":"81316","star":55,"title":"温其堂 :细心温柔IT\u201c熊猫\u201d男","occupation":"互联网","userImg":"http://img1.yulin520.com/news/XPW8OZXMSFR0O015UA7D.jpg#598_597","impressEditId":337,"impressType":0,"topTime":1468574992000,"recommend":0,"remark":"","click":0,"userName":"榴莲","source":0,"reporter":0,"status":1,"content":""},{"userAge":24,"introduction":"92年/金牛座 /性格随和,自信大方/喜欢脾气好,爱运动,对人友好的男生/公司职员","replyTimes":13,"url":"http://www.yulin520.com/a2a/h5/impress/i1/340?a=1507892610999","createTime":1466500236000,"hxKey":"2a294b9ffd9fb38d7b5b8739c821720f","img":"http://img1.yulin520.com/news/RPZ58LLNXFR0OKFGFHGK.jpg#616_695","yulin":"81370","star":72,"title":"曾思慧: 爱冒险爱尖叫的真性情Girl","occupation":"银行","userImg":"http://img1.yulin520.com/news/RPZ58LLNXFR0OKFGFHGK.jpg#616_695","impressEditId":340,"impressType":0,"topTime":1468574986000,"recommend":0,"remark":"","click":0,"userName":"pony","source":0,"reporter":0,"status":1,"content":""},{"userAge":25,"introduction":"91年/巨蟹座/乐观开朗,沉稳内敛,机智幽默/喜欢温柔,体贴,孝顺的女生","replyTimes":11,"url":"http://www.yulin520.com/a2a/h5/impress/i1/341?a=1507892610999","createTime":1466678686000,"hxKey":"9f2d5f4346dee0c4983cb77f9a1892e7","img":"http://img1.yulin520.com/news/NQ1HJD75IFR0OARCWFEG.jpg#501_499","yulin":"80908","star":34,"title":"杨辉: 挑战自我从早起开始","occupation":"市场推广","userImg":"http://img1.yulin520.com/news/NQ1HJD75IFR0OARCWFEG.jpg#501_499","impressEditId":341,"impressType":0,"topTime":1468203095000,"recommend":0,"remark":"","click":0,"userName":"拯救","source":0,"reporter":0,"status":1,"content":""},{"userAge":24,"introduction":"92年 狮子座/开朗东北妞/想开书店/公司职员","replyTimes":9,"url":"http://www.yulin520.com/a2a/h5/impress/i1/244?a=1507892610999","createTime":1461738088000,"hxKey":"751120bb7102fa563f098ee8c33ecb67","img":"http://img1.yulin520.com/news/SO9EZSX0QC90ONZY8SVZ.jpg#619_650","yulin":"77323","star":46,"title":"蔡嘉纯:咱东北菇凉特开朗","occupation":"市场推广","userImg":"http://img1.yulin520.com/news/SO9EZSX0QC90ONZY8SVZ.jpg#619_650","impressEditId":244,"impressType":0,"topTime":1467618377000,"recommend":0,"remark":"","click":0,"userName":"林bibibi","source":0,"reporter":0,"status":1,"content":""},{"userAge":22,"introduction":"94年 水瓶座/曾经是淘气包/人缘好讲义气/金融业客户经理","replyTimes":11,"url":"http://www.yulin520.com/a2a/h5/impress/i1/246?a=1507892610999","createTime":1461749927000,"hxKey":"785fd3ce68d2a280a99896946dc67bf2","img":"http://img1.yulin520.com/news/OOAA5UE7EC90OM4X4AQ7.jpg#800_600","yulin":"77479","star":41,"title":"李林:曾经的淘气小子","occupation":"信贷","userImg":"http://img1.yulin520.com/news/OOAA5UE7EC90OM4X4AQ7.jpg#800_600","impressEditId":246,"impressType":0,"topTime":1467367384000,"recommend":0,"remark":"","click":0,"userName":"李林","source":0,"reporter":0,"status":1,"content":""},{"userAge":25,"introduction":"91年 天蝎座/积极乐观/追求新奇事物/互联网销售经理","replyTimes":16,"url":"http://www.yulin520.com/a2a/h5/impress/i1/218?a=1507892610999","createTime":1460446369000,"hxKey":"406e5f1f020f65203d200b686cd11da3","img":"http://img1.yulin520.com/news/FNTQDAWAJKF0OGYIUMRO.jpg#800_600","yulin":"76330","star":53,"title":"唐政:眉清目秀好少年","occupation":"互联网","userImg":"http://img1.yulin520.com/news/FNTQDAWAJKF0OGYIUMRO.jpg#800_600","impressEditId":218,"impressType":0,"topTime":1467367368000,"recommend":0,"remark":"","click":0,"userName":"Truman✨","source":0,"reporter":0,"status":1,"content":""}] * message : null */ private int code; private boolean success; private int height; private int width; private Object message; private List<DataBean> data; public int getCode() { return code; } public void setCode(int code) { this.code = code; } public boolean isSuccess() { return success; } public void setSuccess(boolean success) { this.success = success; } public int getHeight() { return height; } public void setHeight(int height) { this.height = height; } public int getWidth() { return width; } public void setWidth(int width) { this.width = width; } public Object getMessage() { return message; } public void setMessage(Object message) { this.message = message; } public List<DataBean> getData() { return data; } public void setData(List<DataBean> data) { this.data = data; } public static class DataBean { /** * userAge : 33 * introduction : 83年/巨蟹座/ 开朗幽默,热情善良,追求刺激/喜欢温柔,体贴,可爱,善良的女孩/金融 * replyTimes : 17 * url : http://www.yulin520.com/a2a/h5/impress/i1/334?a=1507892610999 * createTime : 1466160199000 * hxKey : 60fd9c2377f81ba1ccca450fb794e016 * img : http://img1.yulin520.com/news/HPUCVP74IFR0OKCZ9QQH.jpg#405_304 * yulin : 81373 * star : 58 * title : 刘峰鸣 :能文能武,Call Me峰鸣哥 * occupation : 证劵投资 * userImg : http://img1.yulin520.com/news/HPUCVP74IFR0OKCZ9QQH.jpg#405_304 * impressEditId : 334 * impressType : 0 * topTime : 1469503026000 * recommend : 0 * remark : * click : 0 * userName : 刘LLL * source : 0 * reporter : 0 * status : 1 * content : */ private int userAge; private String introduction; private int replyTimes; private String url; private long createTime; private String hxKey; private String img; private String yulin; private int star; private String title; private String occupation; private String userImg; private int impressEditId; private int impressType; private long topTime; private int recommend; private String remark; private int click; private String userName; private int source; private int reporter; private int status; private String content; public int getUserAge() { return userAge; } public void setUserAge(int userAge) { this.userAge = userAge; } public String getIntroduction() { return introduction; } public void setIntroduction(String introduction) { this.introduction = introduction; } public int getReplyTimes() { return replyTimes; } public void setReplyTimes(int replyTimes) { this.replyTimes = replyTimes; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public long getCreateTime() { return createTime; } public void setCreateTime(long createTime) { this.createTime = createTime; } public String getHxKey() { return hxKey; } public void setHxKey(String hxKey) { this.hxKey = hxKey; } public String getImg() { return img; } public void setImg(String img) { this.img = img; } public String getYulin() { return yulin; } public void setYulin(String yulin) { this.yulin = yulin; } public int getStar() { return star; } public void setStar(int star) { this.star = star; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getOccupation() { return occupation; } public void setOccupation(String occupation) { this.occupation = occupation; } public String getUserImg() { return userImg; } public void setUserImg(String userImg) { this.userImg = userImg; } public int getImpressEditId() { return impressEditId; } public void setImpressEditId(int impressEditId) { this.impressEditId = impressEditId; } public int getImpressType() { return impressType; } public void setImpressType(int impressType) { this.impressType = impressType; } public long getTopTime() { return topTime; } public void setTopTime(long topTime) { this.topTime = topTime; } public int getRecommend() { return recommend; } public void setRecommend(int recommend) { this.recommend = recommend; } public String getRemark() { return remark; } public void setRemark(String remark) { this.remark = remark; } public int getClick() { return click; } public void setClick(int click) { this.click = click; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public int getSource() { return source; } public void setSource(int source) { this.source = source; } public int getReporter() { return reporter; } public void setReporter(int reporter) { this.reporter = reporter; } public int getStatus() { return status; } public void setStatus(int status) { this.status = status; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } } }
//工具包
public class ImageLoaderUtlis { public static void inint(Context context){ File cacheDir = StorageUtils.getCacheDirectory(context); //缓存文件夹路径 ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context) .threadPoolSize(3) // default 线程池内加载的数量 .threadPriority(Thread.NORM_PRIORITY - 2) // default 设置当前线程的优先级 .tasksProcessingOrder(QueueProcessingType.FIFO) // default .denyCacheImageMultipleSizesInMemory() .memoryCache(new LruMemoryCache(2 * 1024 * 1024)) //可以通过自己的内存缓存实现 .memoryCacheSize(2 * 1024 * 1024) // 内存缓存的最大值 .memoryCacheSizePercentage(13) // default .diskCache(new UnlimitedDiscCache(cacheDir)) // default 可以自定义缓存路径 .diskCacheSize(50 * 1024 * 1024) // 50 Mb sd卡(本地)缓存的最大值 .diskCacheFileCount(100) // 可以缓存的文件数量 // default为使用HASHCODE对UIL进行加密命名, 还可以用MD5(new Md5FileNameGenerator())加密 .diskCacheFileNameGenerator(new HashCodeFileNameGenerator()) .imageDownloader(new BaseImageDownloader(context)) // default .defaultDisplayImageOptions(DisplayImageOptions.createSimple()) // default .writeDebugLogs() // 打印debug log .build(); //开始构建 ImageLoader.getInstance().init(config); } public static DisplayImageOptions imageOptions(){ DisplayImageOptions options = new DisplayImageOptions.Builder() .showImageOnLoading(R.mipmap.ic_launcher) // 设置图片下载期间显示的图片 .showImageForEmptyUri(R.mipmap.ic_launcher) // 设置图片Uri为空或是错误的时候显示的图片 .showImageOnFail(R.mipmap.ic_launcher) // 设置图片加载或解码过程中发生错误显示的图片 .resetViewBeforeLoading(true) // default 设置图片在加载前是否重置、复位 .delayBeforeLoading(1000) // 下载前的延迟时间 .cacheInMemory(true) // default 设置下载的图片是否缓存在内存中 .cacheOnDisk(true) // default 设置下载的图片是否缓存在SD卡中 .considerExifParams(true) // default .imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2) // default 设置图片以如何的编码方式显示 .bitmapConfig(Bitmap.Config.RGB_565) // default 设置图片的解码类型 .displayer(new SimpleBitmapDisplayer()) // default 还可以设置圆角图片new RoundedBitmapDisplayer(20);;CircleBitmapDisplayer()圆形 .build(); return options; } }
//工具包
public class MyTask extends AsyncTask<String,Void,String>{ private Icallbacks icallbacks; public MyTask(Icallbacks icallbacks) { this.icallbacks = icallbacks; } @Override protected String doInBackground(String... params) { String str=""; try { URL url=new URL(params[0]); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("GET"); connection.setReadTimeout(5000); connection.setConnectTimeout(5000); if(connection.getResponseCode()==200){ InputStream inputStream = connection.getInputStream(); //调用静态类中的方法 str=StreamToString.streamToStr(inputStream,"utf-8"); } } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return str; } @Override protected void onPostExecute(String s) { super.onPostExecute(s); icallbacks.updataUiByjson(s); } //定一个接口 public interface Icallbacks{ void updataUiByjson(String jsonstr); } }
//工具包
public class StreamToString { public static String streamToStr(InputStream inputStream,String charset){ StringBuilder builder=new StringBuilder(); try { BufferedReader br=new BufferedReader(new InputStreamReader(inputStream,"utf-8")); String con; while((con=br.readLine())!=null){ builder.append(con); } br.close(); return builder.toString(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return ""; } }
//工具包调用
public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); ImageLoaderUtlis.inint(this); } }
//activity-main
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.xlistview.MainActivity"> <com.example.xlistview.view.XListView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/xlv" ></com.example.xlistview.view.XListView> </RelativeLayout>
//item
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <ImageView android:layout_width="100dp" android:layout_height="100dp" android:id="@+id/image_view" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/text_title" /> </LinearLayout> //要加的权限
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
android:name=".MyApplication"
//还有要从网上下载XListView-Android-master 导入项目中