比较美观的ListView下拉刷新上拉加载

本文介绍了一个基于安卓的应用中实现下拉刷新和上拉加载更多功能的方法。使用PullToRefreshLayout组件配合自定义适配器,通过网络请求获取书籍信息,并展示了如何更新UI以反映新数据。
package com.example.demo;

import java.util.LinkedList;

import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;

import com.bwie.guoxinbo20160505.pullToRefresh.Bean;
import com.bwie.guoxinbo20160505.pullToRefresh.Bean.MyData;
import com.bwie.guoxinbo20160505.pullToRefresh.MyAdapter;
import com.bwie.guoxinbo20160505.pullToRefresh.PullToRefreshLayout;
import com.bwie.guoxinbo20160505.pullToRefresh.PullToRefreshLayout.OnRefreshListener;
import com.bwie.guoxinbo20160505.pullToRefresh.PullableListView;
import com.google.gson.Gson;
import com.lidroid.xutils.HttpUtils;
import com.lidroid.xutils.exception.HttpException;
import com.lidroid.xutils.http.ResponseInfo;
import com.lidroid.xutils.http.callback.RequestCallBack;
import com.lidroid.xutils.http.client.HttpRequest.HttpMethod;













public class MainActivity extends Activity {

	private PullToRefreshLayout layout;
	private PullableListView listView;
	private String url = "http://apis.juhe.cn/goodbook/query?key=9d6ef8c31647a206e05fcaff70527182&catalog_id=242&pn=0&rn=10";
	private boolean flag=true;
	private LinkedList<MyData> list2;
	private LinkedList<MyData> list;
	private MyAdapter adapter;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		layout = (PullToRefreshLayout) findViewById(R.id.layoutboke);
		listView = (PullableListView) findViewById(R.id.listviboke);

		
		new MyAsync().execute();
		layout.setOnRefreshListener(new OnRefreshListener() {

			// 刷新
			@Override
			public void onRefresh(PullToRefreshLayout pullToRefreshLayout) {
				String url1 = "http://apis.juhe.cn/goodbook/query?key=9d6ef8c31647a206e05fcaff70527182&catalog_id=242&pn=10&rn=10";
				
				getJson(url1, pullToRefreshLayout);
			
			}

			// 加载
			@Override
			public void onLoadMore(final PullToRefreshLayout pullToRefreshLayout) {

				String url2 = "http://apis.juhe.cn/goodbook/query?key=9d6ef8c31647a206e05fcaff70527182&catalog_id=242&pn=20&rn=10";
				
			   getJson(url2, null);	
			   new Handler().postDelayed(new Runnable() {
				
				@Override
				public void run() {
					   pullToRefreshLayout.loadmoreFinish(PullToRefreshLayout.SUCCEED);
				}
			}, 2000);
			
			}
		});
	}

	
	// 获取数据
	private void getJson( String url,final PullToRefreshLayout pullToRefreshLayout) {
		HttpUtils utils = new HttpUtils();
		utils.configResponseTextCharset("utf-8");
		utils.send(HttpMethod.POST, url, new RequestCallBack<String>() {

	

			@Override
			public void onFailure(HttpException arg0, String arg1) {
			}

			@Override
			public void onSuccess(ResponseInfo<String> arg0) {
				String json = arg0.result;
				Gson gson = new Gson();
				Bean bean = gson.fromJson(json, Bean.class);
				// 证明是第一次请求网络
				if (flag) {
					list = bean.result.data;
					adapter = new MyAdapter(MainActivity.this, list);
					listView.setAdapter(adapter);
//					gv_view.onRefreshComplete();
//					pullToRefreshLayout.loadmoreFinish(PullToRefreshLayout.SUCCEED);
					flag = false;
				} else {
					// 执行下拉刷新或者上拉加载的时候,进入此判断。通过判断boolean的值来判断是什么操作。

					if (pullToRefreshLayout==null) {
						// 上拉加载,加载出的数据在数据的底部。
						list2 = bean.result.data;
						for (MyData myData : list2) {
							list.add(myData);
						}
//						gv_view.onRefreshComplete();
						
						adapter.notifyDataSetChanged();
					} else {
						// 下拉刷新,刷新出来的数据在数据的顶部,之前的数据还在。
						list2 = bean.result.data;
						for (MyData myData : list2) {
							list.addFirst(myData);
						}
//						gv_view.onRefreshComplete();
						pullToRefreshLayout
						.refreshFinish(PullToRefreshLayout.SUCCEED);
						adapter.notifyDataSetChanged();
					}
				
				}
			}
		});
	}

	// 异步加载
	class MyAsync extends AsyncTask<String, Integer, String> {

		@Override
		protected String doInBackground(String... params) {
			try {
				Thread.sleep(3000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			return null;
		}

		@Override
		protected void onPostExecute(String result) {
			getJson(url, null);
			super.onPostExecute(result);
		}
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值