public class FragmentOne extends Fragment implements IXListViewListener {
private XListView xLv;
private String path = "http://www.oschina.net/action/api/news_list";
private int index = 0;
private List<News> list = new ArrayList<News>();
private boolean isRefresh = false;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment1_item, container, false);
xLv = (XListView) view.findViewById(R.id.xlv);
return view;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
xLv.setPullLoadEnable(true);
xLv.setPullRefreshEnable(true);
xLv.setXListViewListener(this);
// 请求数据
requestData();
super.onActivityCreated(savedInstanceState);
}
private com.example.adapter.MyAdapter adapter = null;
// 加载数据
private void requestData() {
HttpUtils httpUtils = new HttpUtils();
String myPath = path + "?catalog=1&pageIndex=" + index + "&pageSize=12";
httpUtils.send(HttpMethod.GET, myPath, new RequestCallBack<String>() {
@Override
public void onFailure(HttpException arg0, String arg1) {
// TODO Auto-generated method stub
}
@Override
public void onSuccess(ResponseInfo<String> arg0) {
String result = arg0.result;
ByteArrayInputStream bis = new ByteArrayInputStream(result.getBytes());
List<News> startData = startData(bis);
if (isRefresh) {
list.clear();
}
list.addAll(startData);
if (adapter == null) {
adapter = new com.example.adapter.MyAdapter(getActivity(), list);
xLv.setAdapter(adapter);
} else {
adapter.notifyDataSetChanged();
}
onLoad();
}
});
}
protected List<News> startData(InputStream bis) {
List<News> nList = new ArrayList<News>();
try {
XmlPullParser xmlParser = Xml.newPullParser();
// 设置编码
xmlParser.setInput(bis, "UTF-8");
News n = null;
// 获取数据类型
int eventType = xmlParser.getEventType();
while (eventType != XmlResourceParser.END_DOCUMENT) {
// 通过getName判断读到哪个标签,然后通过nextText()获取文本节点值,或通过getAttributeValue(i)获取属性节点值
String tagName = xmlParser.getName();
switch (eventType) {
case XmlPullParser.START_DOCUMENT:
break;
case XmlPullParser.START_TAG:
// 如果新闻标签的开始我们需要创建News对象
if ("news".equalsIgnoreCase(tagName)) {
n = new News();
} else if ("title".equals(tagName)) {
n.setTitle(xmlParser.nextText());
} else if ("body".equals(tagName)) {
n.setBody(xmlParser.nextText());
}
break;
case XmlPullParser.END_TAG:
if ("news".equals(tagName)) {
list.add(n);
Log.e("info", "++++++" + n);
n = null;
}
break;
case XmlPullParser.END_DOCUMENT:
break;
}
eventType = xmlParser.next();
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return nList;
}
@Override
public void onRefresh() {
index = 0;
isRefresh = true;
onLoad();
}
@Override
public void onLoadMore() {
index++;
isRefresh = false;
requestData();
}
//阻止加载更多
public void onLoad() {
xLv.stopRefresh();
xLv.stopLoadMore();
xLv.setRefreshTime("刚刚");
}
}