XlistView上拉加载刷新
public class MainActivity extends Activity {
List<News> list = new ArrayList<News>();
List<News> list2 = new ArrayList<News>();
MyAdapter adapter;
InputStream is;
int pager = 0;
XListView xlist;
Handler handler = new Handler() {
public void handleMessage(Message msg) {
int i = msg.what;
if (i == 1) {
adapter = new MyAdapter(MainActivity.this, list);
xlist.setAdapter(adapter);
} else {
adapter.notifyDataSetChanged();
}
};
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
xlist = (XListView) findViewById(R.id.xlist);
xlist.setPullLoadEnable(true);
xlist.setPullRefreshEnable(true);
new Thread() {
public void run() {
try {
is = Utils.readXMLinput("http://www.oschina.net/action/api/news_list?catalog=1&pageIndex=" + pager
+ "&pageSize=20");
list = Utils.jiexieXML(is);
Message msg = new Message();
msg.what = 1;
handler.sendEmptyMessage(msg.what);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}.start();
xlist.setXListViewListener(new IXListViewListener() {
@Override
public void onRefresh() {
if (pager == 0) {
Toast.makeText(MainActivity.this, "这已经是最新页", Toast.LENGTH_SHORT).show();
} else {
pager = 0;
new Thread() {
public void run() {
try {
is = Utils
.readXMLinput("http://www.oschina.net/action/api/news_list?catalog=1&pageIndex="
+ pager + "&pageSize=20");
list2 = Utils.jiexieXML(is);
list.addAll(list2);
Message msg = new Message();
msg.what = 2;
handler.sendEmptyMessage(msg.what);
stopLoadOrRefresh();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}.start();
}
stopLoadOrRefresh();
}
@Override
public void onLoadMore() {
pager++;
new Thread() {
public void run() {
try {
is = Utils.readXMLinput("http://www.oschina.net/action/api/news_list?catalog=1&pageIndex="
+ pager + "&pageSize=20");
list2 = Utils.jiexieXML(is);
list.addAll(list2);
Message msg = new Message();
msg.what = 2;
handler.sendEmptyMessage(msg.what);
stopLoadOrRefresh();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}.start();
}
});
}
private void stopLoadOrRefresh() {
// 停止加载
xlist.stopLoadMore();
// 停止刷新
xlist.stopRefresh();
// 最近一次刷新时间
xlist.setRefreshTime("刚刚");
}
}
ListView上拉加载
<pre name="code" class="java">public class MainActivity extends Activity {
private ListView html;
//第一页的Url
//第二页的Url
int pager = 0;
private String url2 = "http://www.oschina.net/action/api/news_list?catalog=1&pageIndex=2&pageSize=20";
//输入流
InputStream input;
//两个List集合
List<News> list = new ArrayList<News>();
List<News> list2 = new ArrayList<News>();
//自定义的BaseAdapter
MyAdapter adapter;
//判断是否屏幕中最后一个条目是最后一个条目了
boolean isLast;
Handler handler = new Handler() {
public void handleMessage(Message msg) {
if (msg.what == 1) {
adapter = new MyAdapter(MainActivity.this, list);
html.setAdapter(adapter);
}else{
adapter.notifyDataSetChanged();
}
};
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
html = (ListView) findViewById(R.id.list);
new Thread() {
public void run() {
try {
input = Utils.readXMLinput("http://www.oschina.net/action/api/news_list?catalog=1&pageIndex="+pager+"&pageSize=20");
list = Utils.jiexieXML(input);
Log.e("list", list.toString());
Message msg = new Message();
msg.what = 1;
handler.sendEmptyMessage(msg.what);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}.start();
html.setOnScrollListener(new OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
pager++;
//如果屏幕停止滑动且屏幕中最后一条条目是最后一条条目的时候第二次请求数据
if (OnScrollListener.SCROLL_STATE_IDLE == scrollState && isLast) {
Toast.makeText(MainActivity.this, "正在加载", Toast.LENGTH_SHORT).show();
new Thread() {
public void run() {
try {
input = Utils.readXMLinput("http://www.oschina.net/action/api/news_list?catalog=1&pageIndex="+pager+"&pageSize=20");
list2 = Utils.jiexieXML(input);
//拼接
list.addAll(list2);
Log.e("list", list.toString());
Message msg = new Message();
msg.what = 2;
handler.sendEmptyMessage(msg.what);
} catch (Exception e) {
e.printStackTrace();
}
}
}.start();
}
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
isLast = ((visibleItemCount +firstVisibleItem) ==totalItemCount );
}
});
}
}