XListView汇总:http://blog.csdn.net/qq_37454196/article/details/78048970
权限
main.xml
<com.example.xlistview3.View.XListView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/xlistview"></com.example.xlistview3.View.XListView>
item1.xml
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/imageView"
android:layout_weight="1" />
<TextView
android:text="TextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/textView"
android:layout_weight="1" />
public class MainActivity extends AppCompatActivity implements XListView.IXListViewListener {
private XListView xListView;
//=号后面表示页码 1表示第一页
private static final String JSON_URL = "http://www.93.gov.cn/93app/data.do?channelId=2&startNum=";
int pageNum = 1;
private SuperClass superClass;
private List<SuperClass.DataBean> data;
private MyAdapter myAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
xListView = (XListView) findViewById(R.id.xlistview);
xListView.setPullLoadEnable(true);
xListView.setXListViewListener(this);
new AsyncTask<String, Integer, String>() {
@Override
protected String doInBackground(String... params) {
String jsonStr = new NetWorkUtils().getJsonByHttpUrlConnection(JSON_URL + pageNum);
return jsonStr;
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
Gson gson = new Gson();
superClass = gson.fromJson(s, SuperClass.class);
//得到要是展示的数据
data = superClass.getData();
//把data配置给xlistview
myAdapter = new MyAdapter(MainActivity.this, data);
xListView.setAdapter(myAdapter);
}
}.execute();
}
/**
* 关闭刷新和加载
*/
public void onLoad() {
xListView.stopLoadMore();
xListView.stopRefresh();
xListView.setRefreshTime("刚刚");
}
/**
* 下拉刷新,会进入这个方法
*/
@Override
public void onRefresh() {
//重新加载第一页(刷新)
Toast.makeText(this, "下拉刷新", Toast.LENGTH_SHORT).show();
pageNum = 1;//下拉刷新的时候,把页码恢复到第一页
new AsyncTask<String, Integer, String>() {
@Override
protected String doInBackground(String... params) {
String jsonStr = new NetWorkUtils().getJsonByHttpUrlConnection(JSON_URL + pageNum);
return jsonStr;
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
Gson gson = new Gson();
superClass = gson.fromJson(s, SuperClass.class);
//得到要是展示的数据
data = superClass.getData();
//把data配置给xlistview
myAdapter = new MyAdapter(MainActivity.this, data);
xListView.setAdapter(myAdapter);
onLoad();
}
}.execute();
}
/**
* 上拉加载,会进入这个方法
*/
@Override
public void onLoadMore() {
//加载下一页,显示在listview中
Toast.makeText(this, "上拉加载", Toast.LENGTH_SHORT).show();
pageNum++;//页码加1,下一页
new AsyncTask<String, Integer, String>() {
@Override
protected String doInBackground(String... params) {
String jsonStr = new NetWorkUtils().getJsonByHttpUrlConnection(JSON_URL + pageNum);
return jsonStr;
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
Gson gson = new Gson();
superClass = gson.fromJson(s, SuperClass.class);
//得到要是展示的数据
List<SuperClass.DataBean> newPageData = superClass.getData();//新的一页的数据
data.addAll(newPageData);//把新请求到的数据,追加到所有的数据(最开始的集合)的集合中
myAdapter.notifyDataSetChanged();//刷新适配器,展示新的数据
onLoad();//停止刷新和加载
}
}.execute();
}
}
MyAdapter.java
public class MyAdapter extends BaseAdapter {
private Context context;
private List<SuperClass.DataBean> data;
public MyAdapter(Context context, List<SuperClass.DataBean> data) {
this.context = context;
this.data = data;
}
@Override
public int getCount() {
return data.size();
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (convertView == null) {
holder = new ViewHolder();
convertView = View.inflate(context, R.layout.item1, null);
holder.img = (ImageView) convertView.findViewById(R.id.imageView);
holder.name = (TextView) convertView.findViewById(R.id.textView);
convertView.setTag(holder);
}else{
holder = (ViewHolder) convertView.getTag();
}
//赋值
//得到要显示的值
holder.name.setText(data.get(position).getTITLE());
ImageLoader.getInstance().displayImage(data.get(position).getIMAGEURL(),holder.img);
return convertView;
}
class ViewHolder {
TextView name;
ImageView img;
}
}
MyApplication.java
//ImageLoader类
public class MyApplication extends Application {
//程序真正的入口函数
@Override
public void onCreate() {
super.onCreate();
File cacheDir=this.getExternalCacheDir();//自定义缓存路径
ImageLoaderConfiguration configuration=new ImageLoaderConfiguration.Builder(this)
.memoryCache(new LruMemoryCache(2 * 1024 * 1024))//设置内存缓存区大小
.memoryCacheSize(2 * 1024 * 1024)//设置缓存区大小
.memoryCacheExtraOptions(320,320)//缓存图片最大的宽度与高度 px
.diskCacheSize(50*1024*1024)//设置sd卡缓存的空间大小
.diskCacheFileNameGenerator(new Md5FileNameGenerator())//sd卡缓存图片的命名 使用md5加密方式
//自定义sd卡的缓存路径
.diskCache(new UnlimitedDiskCache(cacheDir))
.diskCacheFileCount(100)//缓存文件的最大数量
.writeDebugLogs()//写入日志
.threadPoolSize(3)//线程池
.build();
//对imageLoader进行初使化
ImageLoader.getInstance().init(configuration);
}
}
NetWorkUtils.java
public class NetWorkUtils {
public String getJsonByHttpUrlConnection(String jsonUrl){
URL url = null;
HttpURLConnection httpURLConnection = null;
String jsonStr = "";
try {
url = new URL(jsonUrl);//创建URL对象,连接JSON_URL对应的服务器
httpURLConnection = (HttpURLConnection) url.openConnection();//打开连接
httpURLConnection.setConnectTimeout(5000);//设置请求时长为5秒
httpURLConnection.setReadTimeout(5000);//设置读取服务器响应数据的时长
int resCode = httpURLConnection.getResponseCode();//得到响应结果码
if(resCode == 200){//表示响应成功,可以获得相应的额结果
//得到响应的结果,,服务器响应的输入流
InputStream inputStream = httpURLConnection.getInputStream();
byte[] buffers = new byte[1024];
int length = 0;
while((length = inputStream.read(buffers)) != -1){//本次循环成立,说明读取到了数据
jsonStr += new String(buffers,0,length);
}
//循环完毕,读取数据完毕
Log.d("main",jsonStr);
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return jsonStr;
}
}
SuperClass.java
//Bean类
http://www.93.gov.cn/93app/data.do?channelId=2&startNum=1