1. 程式人生 > >XlistView 上拉載入,下拉重新整理

XlistView 上拉載入,下拉重新整理

public class MainActivity extends Activity implements IXListViewListener {

	private XListView xListView;
	private String uul = "http://www.oschina.net/action/api/tweet_list";
	private News news;
	private int down = 0;
	private int pageIndex = 0;
	private int pageSize = 20;
	private int count = 0;
	private Handler handler = new Handler() {
		public void handleMessage(android.os.Message msg) {

			int count = msg.what;

			switch (count) {
			// 第一次進入程式時載入的資料
			case 0:
				ArrayList list0 = (ArrayList) msg.obj;
				xListView.setAdapter(new MyAdapter(MainActivity.this, list0));
				break;
			// 下拉載入的資料
			case 1:

				ArrayList list1 = (ArrayList) msg.obj;

				arr.addAll(list1);
				xListView.setAdapter(new MyAdapter(MainActivity.this, arr));
				// 停止重新整理
				xListView.stopRefresh();

				break;
			// 上拉載入的資料
			case 2:
				count++;
				// 判斷是否達到資訊的總條數
				int index = pageSize * count;
				if (count <= 500) {
					ArrayList list2 = (ArrayList) msg.obj;
					arr.addAll(list2);
					xListView.setAdapter(new MyAdapter(MainActivity.this, arr));
					// 停止重新整理
					xListView.stopLoadMore();
				}

				break;

			default:
				break;
			}

		};
	};
	private ArrayList list;
	private ArrayList arr;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		// 例項化一個空集合用來存載入的資料
		arr = new ArrayList();
		// 找到控制元件
		xListView = (XListView) findViewById(R.id.xlistView);
		// 設定xlistView的下拉上拉開關為true,才能重新整理資料
		xListView.setPullLoadEnable(true);
		xListView.setPullRefreshEnable(true);
		// 設定重新整理監聽
		xListView.setXListViewListener(this);

		// 請求資料的方法
		getDataFromNet(uul, 0);

	}

	private void getDataFromNet(String uul, final int i) {
		HttpUtils utils = new HttpUtils();
		utils.send(HttpMethod.GET, uul, new RequestCallBack() {

			@Override
			public void onFailure(HttpException arg0, String arg1) {
				// TODO Auto-generated method stub

			}

			@Override
			public void onSuccess(ResponseInfo arg0) {
				// 將請求結果取出
				String result = arg0.result;
				// 因為是XML,要用pull解析,所以要把字串轉換成輸入流
				InputStream is = new ByteArrayInputStream(result.getBytes());
				// XML解析
				ArrayList list = parseXml(is);
				Message msg = new Message();
				msg.what = i;
				msg.obj = list;
				handler.sendMessage(msg);

			}

		});
	}

	private ArrayList parseXml(InputStream result) {
		// 獲取解析者
		XmlPullParser pullParser = Xml.newPullParser();

		try {
			pullParser.setInput(result, "utf-8");
			list = new ArrayList();
			// 獲取事件型別
			int eventType = pullParser.getEventType();
			// 判斷事件型別
			while (eventType != pullParser.END_DOCUMENT) {
				switch (eventType) {
				// 判斷節點名字
				case XmlPullParser.START_TAG:
					// 獲取節點名字
					String startName = pullParser.getName();
					if (startName.equals("tweet")) {
						news = new News();

					} else if (startName.equals("id")) {
						news.setId(pullParser.nextText());
					} else if (startName.equals("portrait")) {
						news.setPortrait(pullParser.nextText());
					} else if (startName.equals("author")) {
						news.setAuthor(pullParser.nextText());
					} else if (startName.equals("body")) {
						news.setBody(pullParser.nextText());

					} else if (startName.equals("imgSmall")) {
						news.setImgSmall(pullParser.nextText());
					}

					break;
				case XmlPullParser.END_TAG:
					String endName = pullParser.getName();
					if (endName.equals("tweet")) {
						list.add(news);
					}

					break;

				default:
					break;
				}
				eventType = pullParser.next();

			}

		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return list;

	}

	// 下拉重新整理
	@Override
	public void onRefresh() {

		// 請求資料的方法
		getDataFromNet(uul, 1);

	}

	// 上拉載入
	@Override
	public void onLoadMore() {
		pageIndex++;
		// 重新傳遞一個網址
		String uul2 = "http://www.oschina.net/action/api/tweet_list?pageIndex="
				+ pageIndex;
		// 請求資料的方法
		getDataFromNet(uul2, 2);

	}

}