XlistView 上拉載入,下拉重新整理
阿新 • • 發佈:2019-01-25
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); } }