XlIstView在github上开源,,,地址:https://github.com/Maxwin-z/XListView-Android
* 1.下载gitHub上XlistView上的压缩包
* 2.复制view包下的三个类,,,,,注意导包的问题
* 3.赋值layout下面的footer布局和header的布局
* 4.赋值string下面的字段值
*
*
* 支持下拉刷新和上拉加载的操作
* 1.设置上拉还是下拉,还是两个都使用
* 2.设置刷新的监听事件....在监听事件里面去加载数据,然后刷新适配器的操作
*
* 这里使用接口地址是:http://www.yulin520.com/a2a/impressApi/news/mergeList?pageSize=10&page=1
*
* 下拉刷新的时候,添加到集合的最前边
* 上拉加载的时候,添加到集合的后边
*
* -------------------
* 1.加上图片.....使用imageLoader,,,,图片缓存的位置在sd卡根目录下的image文件夹
* 2.加上多条目加载.....根据条目的奇偶数显示不同的视图
一、主类MainActivity
package com.example.my10lianxi;
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import com.example.my10lianxi.view.XListView;
import com.google.gson.Gson;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private XListView lv;
//定义一个大的集合,,,装当前页面所有的数据
List<Data.DataBean> list=new ArrayList<>();
private MyAdapter myAdapter;
//定义一个int值记录第几页
int i=1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv = (XListView) findViewById(R.id.lv);
//设置支持上拉还是下拉
lv.setPullLoadEnable(true);//支持上拉加载更多
lv.setPullRefreshEnable(true);//支持下拉刷新
info();
//设置xlistView的监听事件
lv.setXListViewListener(new XListView.IXListViewListener() {
@Override
public void onRefresh() {
i++;
AsyncTask<Void,Void,String> asyncTask=new AsyncTask<Void, Void, String>() {
@Override
protected String doInBackground(Void... voids) {
String path="http://www.yulin520.com/a2a/impressApi/news/mergeList?pageSize=10&page="+i;
try {
URL url = new URL(path);
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestMethod("GET");
urlConnection.setReadTimeout(5000);
urlConnection.setConnectTimeout(5000);
int responseCode = urlConnection.getResponseCode();
if (responseCode==200){
InputStream inputStream = urlConnection.getInputStream();
String s = convertStreamToString(inputStream);
return s;
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String s) {
Gson gson = new Gson();
Data data = gson.fromJson(s, Data.class);
//下拉刷新的数据需要添加在大集合的最前边
list.addAll(0,data.getData());
if (myAdapter==null){
myAdapter = new MyAdapter(list, MainActivity.this);
lv.setAdapter(myAdapter);
}else{
myAdapter.notifyDataSetChanged();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
Date curDate = new Date(System.currentTimeMillis());//获取当前时间
String str = formatter.format(curDate);
lv.setRefreshTime(str);
}
//下拉加载完成,停止刷新
lv.stopRefresh();
}
};
asyncTask.execute();
}
@Override
public void onLoadMore() {
info();
//上拉加载完成....停止加载
lv.stopLoadMore();
}
});
}
public void info() {
AsyncTask<Void,Void,String> asyncTask=new AsyncTask<Void, Void, String>() {
@Override
protected String doInBackground(Void... voids) {
String path="http://www.yulin520.com/a2a/impressApi/news/mergeList?pageSize=10&page=1";
try {
URL url = new URL(path);
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestMethod("GET");
urlConnection.setReadTimeout(5000);
urlConnection.setConnectTimeout(5000);
int responseCode = urlConnection.getResponseCode();
if (responseCode==200){
InputStream inputStream = urlConnection.getInputStream();
String s = convertStreamToString(inputStream);
return s;
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String s) {
Gson gson = new Gson();
Data data = gson.fromJson(s, Data.class);
//将解析到的集合数据添加到上面的大集合中
list.addAll(data.getData());
if (myAdapter==null){
myAdapter = new MyAdapter(list, MainActivity.this);
lv.setAdapter(myAdapter);
}else{
myAdapter.notifyDataSetChanged();
}
}
};
asyncTask.execute();
}
/**
* 将输入流转成字符串
*
* @param is
* 输入流
* @return 返回字符串
*/
private static String convertStreamToString(InputStream is) {
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
StringBuilder sb = new StringBuilder();
String line = null;
try {
while ((line = reader.readLine()) != null) {
sb.append(line);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return sb.toString();
}
}
二、适配器
package com.example.my10lianxi;
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import com.nostra13.universalimageloader.core.ImageLoader;
import java.util.List;
/**
* Created by Administrator on 2017/10/11 0011.
*/
public class MyAdapter extends BaseAdapter{
List<Data.DataBean> list;
Context con;
int a=0;
int b=1;
public MyAdapter(List<Data.DataBean> list, Context con) {
this.list = list;
this.con = con;
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int i) {
return list.get(i);
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public int getViewTypeCount() {
return 2;
}
@Override
public int getItemViewType(int position) {
if (position%2==0){
return a;
}
return b;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
if (getItemViewType(i)==a){
ViewHolder1 vh = null;
if (view==null){
vh=new ViewHolder1();
view=View.inflate(con,R.layout.child1,null);
vh.imageView= (ImageView) view.findViewById(R.id.img);
vh.textView= (TextView) view.findViewById(R.id.name);
view.setTag(vh);
}else{
vh= (ViewHolder1) view.getTag();
}
vh.textView.setText(list.get(i).getTitle());
ImageLoader.getInstance().displayImage(list.get(i).getImg(),vh.imageView,ImageUrit.getdata2());
}else if (getItemViewType(i)==b){
ViewHolder2 vh = null;
if (view==null){
vh=new ViewHolder2();
view=View.inflate(con,R.layout.child2,null);
vh.imageView= (ImageView) view.findViewById(R.id.img);
vh.textView= (TextView) view.findViewById(R.id.name);
view.setTag(vh);
}else{
vh= (ViewHolder2) view.getTag();
}
vh.textView.setText(list.get(i).getTitle());
ImageLoader.getInstance().displayImage(list.get(i).getImg(),vh.imageView,ImageUrit.getdata());
}
return view;
}
class ViewHolder1{
ImageView imageView;
TextView textView;
}
class ViewHolder2{
ImageView imageView;
TextView textView;
}
}