package com.todayinfo.ui.fragment;
import java.util.ArrayList;
import org.apache.http.Header;
import android.content.Intent;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.google.gson.Gson;
import com.handmark.pulltorefresh.library.PullToRefreshAdapterViewBase.OnPreRefreshingAnimListener;
import com.handmark.pulltorefresh.library.PullToRefreshBase;
import com.handmark.pulltorefresh.library.PullToRefreshBase.OnLastItemVisibleListener;
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.squareup.picasso.Picasso;
import com.todayinfo.model.LifeNews;
import com.todayinfo.model.LifeNewsList;
import com.todayinfo.ui.activity.LifeNewsDetailActivity;
import com.todayinfo.utils.AsyncHttpUtil;
import com.todayinfo.utils.LocalDisplay;
public class LifeNewFragment extends SuperFragment {
private PullToRefreshListView mListView;
private NewsAdapter mAdapter;
private ArrayList<LifeNews> mList = new ArrayList<LifeNews>();
private static final String BEFORE_PATH = "http://content.2500city.com/Json?method=GetNewsListByChannelId&appVersion=3.4&numPerPage=30&adNum=50&orderType=3&channelId=";
private static final String AFTER_PATH = "&requiredPage=";
private int channelId; // 新闻 = 5,社区 = 27,房产 = 23,娱乐 = 21,汽车 = 24,
private int requiredPage = 1;
private RelativeLayout viewContainer;
private LinearLayout footerView; //最后一条listview
public LifeNewFragment() {
}
public LifeNewFragment(int channelId) {
this.channelId = channelId;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fm_life_news_list, container, false);
viewContainer = (RelativeLayout) rootView.findViewById(R.id.container);
LocalDisplay.init(mContext);
loadLifeNewsInfo(true);
return rootView;
}
/**
* 加载生活新闻信息
*/
public void loadLifeNewsInfo(final boolean clean){
String url = BEFORE_PATH + channelId + AFTER_PATH + requiredPage ;
AsyncHttpUtil.get(url, new AsyncHttpResponseHandler() {
@Override
public void onSuccess(int code, Header[] headers, byte[] responseBody) {
try {
if ( clean ) {
mList.clear();
}
Gson gson = new Gson();
LifeNewsList mLifeNewsList = gson.fromJson(new String(responseBody), LifeNewsList.class);
if ( mLifeNewsList!=null ) {
ArrayList<LifeNews> list = mLifeNewsList.getList();
if ( list!=null && list.size()>0 ){
requiredPage ++;
mList.addAll(list);
initListView(); // 初始化页面
} else {
requiredPage = 0;
if ( mList==null && mList.size()==0 ) {
initNetErro();
}
}
}
} catch (Exception e) {
e.printStackTrace();
if ( mList==null && mList.size()==0 ) {
initNetErro();
}
}
}
@Override
public void onFailure(int arg0, Header[] arg1, byte[] arg2, Throwable arg3) {
if ( mList==null && mList.size()==0 ) {
initNetErro();
}
}
});
}
private void initNetErro() {
View netErroView = LayoutInflater.from(mContext).inflate(R.layout.layout_load_noorder, null);
if (viewContainer != null) {
viewContainer.removeAllViews();
viewContainer.addView(netErroView);
}
}
private void initListView() {
if ( mContext == null )
return;
if ( footerView!=null ){
mListView.getRefreshableView().removeFooterView(footerView);
footerView = null;
}
if ( mListView!=null )
mListView.onRefreshComplete();
View view = LayoutInflater.from(mContext).inflate(R.layout.fm_header_with_list_view, null);
mListView = (PullToRefreshListView) view.findViewById(R.id.news_list);
mAdapter = new NewsAdapter();
mListView.setAdapter(mAdapter);
if ( viewContainer!=null ) {
viewContainer.removeAllViews();
viewContainer.addView(view);
}
mListView.setOnRefreshListener(new OnRefreshListener<ListView>() {
@Override
public void onRefresh(PullToRefreshBase<ListView> refreshView) {
if (refreshView.isHeaderShown()){
requiredPage = 1;
loadLifeNewsInfo(true);
}
}
});
mListView.setOnPreRefreshingAnimListener(new OnPreRefreshingAnimListener() {
@Override
public void onPreRefreshingAnim() {
mListView.setFooterLoadingViewHeaderText("加载更多信息");
}
});
mListView.setOnLastItemVisibleListener(new OnLastItemVisibleListener() {
@Override
public void onLastItemVisible() {
if ( requiredPage!=0 ) {
//滑动到底部自动刷新
loadLifeNewsInfo(false);
} else {
//没有下一页了
mListView.onRefreshComplete();
if ( footerView == null ) {
footerView = (LinearLayout) View.inflate(mActivity, R.layout.item_pull_to_refresh_footer, null);
TextView footer = (TextView) footerView.findViewById(R.id.footer);
footer.setText("到底了呢-共" + mList.size() + "条新闻");
mListView.getRefreshableView().addFooterView(footerView);
}
}
}
});
}
@Override
public void retry() {
}
@Override
public void netError() {
}
@Override
public void pwdError() {
}
class NewsAdapter extends BaseAdapter {
@Override
public int getCount() {
return mList.size();
}
@Override
public Object getItem(int position) {
return mList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if ( convertView == null ) {
convertView = View.inflate(mContext, R.layout.item_life_news_lv, null);
holder = new ViewHolder();
holder.imgNewsPic = (ImageView) convertView.findViewById(R.id.imgNewsPic);
holder.title = (TextView) convertView.findViewById(R.id.tvTitle);
holder.description = (TextView) convertView.findViewById(R.id.tvDescription);
holder.date_text = (TextView) convertView.findViewById(R.id.date_text);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
LifeNews item = mList.get(position);
if ( !TextUtils.isEmpty(item.getImage().getSrc()) ) {
Picasso.with(mContext).load(item.getImage().getSrc()).placeholder(R.color.ECECEC).error(R.color.ECECEC).into(holder.imgNewsPic);
}
holder.title.setText(item.getTitle());
holder.date_text.setText(item.getDate());
holder.description.setText(item.getContent());
convertView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(mContext, LifeNewsDetailActivity.class);
Bundle bundle = new Bundle();
bundle.putString("newsId", mList.get(position).getNewsId());
intent.putExtras(bundle);
mContext.startActivity(intent);
getActivity().overridePendingTransition(R.anim.abc_fade_in, R.anim.abc_fade_out);
}
});
return convertView;
}
}
class ViewHolder {
ImageView imgNewsPic;
TextView title;
TextView date_text;
TextView description;
}
}