package com.todayinfo.ui.fragment;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.Header;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import android.content.Intent;
import android.os.Bundle;
import android.util.Xml;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import com.handmark.pulltorefresh.library.PullToRefreshBase;
import com.handmark.pulltorefresh.library.PullToRefreshBase.OnRefreshListener;
import com.handmark.pulltorefresh.library.PullToRefreshListView;
import com.jinghua.todayinformation.R;
import com.loopj.android.http.AsyncHttpResponseHandler;
import com.todayinfo.model.NewItem;
import com.todayinfo.ui.activity.NewsDetailActivity;
import com.todayinfo.ui.adapter.NewsAdapter;
import com.todayinfo.utils.AsyncHttpUtil;
import com.todayinfo.utils.LogUtil;
/**
* 最新的新闻资讯碎片
*
* @author zhou.ni 2015年3月18日
*/
public class HotsNewFragment extends SuperFragment {
private View view;
private PullToRefreshListView hotNewsList;
private NewsAdapter newsAdapter;
private List<NewItem> newList = new ArrayList<NewItem>();
private static String URL_PATH = "http://wcf.open.cnblogs.com/news/hot/40";
private boolean flag = false;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
view = inflater.inflate(R.layout.fm_hotsnew, container, false);
return view;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
hotNewsList = (PullToRefreshListView) view.findViewById(R.id.hots_news_list);
setUpPullToList();
loadHotsNewsInfo(false);
}
/**
* 设置listview的下拉刷新
*/
private void setUpPullToList(){
newsAdapter = new NewsAdapter(mContext, newList);
hotNewsList.setAdapter(newsAdapter);
hotNewsList.setOnRefreshListener(new OnRefreshListener<ListView>() {
@Override
public void onRefresh(PullToRefreshBase<ListView> refreshView) {
if (refreshView.isHeaderShown()){
flag = false;
loadHotsNewsInfo(true);
}
}
});
hotNewsList.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
NewItem item = newList.get(position-1);
Intent intent = new Intent(mContext, NewsDetailActivity.class);
Bundle info = new Bundle();
info.putSerializable("item", item);
intent.putExtras(info);
startActivity(intent);
}
});
}
/**
* 加载热门新闻的数据
*/
private void loadHotsNewsInfo(final boolean clean){
AsyncHttpUtil.get(URL_PATH, new AsyncHttpResponseHandler() {
@Override
public void onSuccess(int code, Header[] headers, byte[] responseBody) {
hotNewsList.onRefreshComplete();
try {
if ( clean ) {
newList.clear();
}
ByteArrayInputStream inputStream = new ByteArrayInputStream(responseBody);
parseHotsNewsXml(inputStream);
newsAdapter.notifyDataSetChanged();
} catch (Exception e) {
e.printStackTrace();
LogUtil.d("error", "hots news XmlPullParserException error");
}
}
@Override
public void onFailure(int arg0, Header[] arg1, byte[] arg2, Throwable arg3) {
}
});
}
/**
* 解析热门新闻
* @param in
* @throws IOException
* @throws XmlPullParserException
*/
private void parseHotsNewsXml(InputStream in) throws XmlPullParserException, IOException {
XmlPullParser parser = Xml.newPullParser();
parser.setInput(in, "UTF-8");
int event = parser.getEventType();
NewItem item = null;
while (event != XmlPullParser.END_DOCUMENT) {
switch (event) {
case XmlPullParser.START_DOCUMENT:
break;
case XmlPullParser.START_TAG:
if ("entry".equals(parser.getName())) {
flag = true;
item = new NewItem();
}
if (flag) {
if ("id".equals(parser.getName())) {
String id = parser.nextText();
item.setId(id);
} else if ("title".equals(parser.getName())) {
String title = parser.nextText();
item.setTitle(title);
} else if ("summary".equals(parser.getName())) {
String summary = parser.nextText();
item.setSummary(summary);
} else if ("published".equals(parser.getName())) {
String published = parser.nextText();
item.setPublished(published);
} else if ("updated".equals(parser.getName())) {
String updated = parser.nextText();
item.setUpdated(updated);
} else if ("link".equals(parser.getName())) {
String link = parser.getAttributeValue(1); //获得第二个属性值
item.setLink(link);
} else if ("diggs".equals(parser.getName())) {
String diggs = parser.nextText();
item.setDiggs(diggs);
} else if ("views".equals(parser.getName())) {
String views = parser.nextText();
item.setViews(views);
} else if ("comments".equals(parser.getName())) {
String comments = parser.nextText();
item.setComments(comments);
} else if ("sourceName".equals(parser.getName())) {
String sourceName = parser.nextText();
item.setSourceName(sourceName);
}
}
break;
case XmlPullParser.TEXT:
break;
case XmlPullParser.END_TAG:
if ("entry".equals(parser.getName())) {
newList.add(item);
}
break;
}
event = parser.next();
}
}
@Override
public void retry() {
}
@Override
public void netError() {
}
@Override
public void pwdError() {
}
}