package com.hupu.games.fragment; import java.util.LinkedList; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.TextView; import com.hupu.games.R; import com.hupu.games.activity.NewsDetailActivity; import com.hupu.games.adapter.NewsListAdapter; import com.hupu.games.common.HuPuRes; import com.hupu.games.common.HupuLog; import com.hupu.games.data.news.NewsEntity; import com.hupu.games.data.news.NewsResp; import com.hupu.games.view.XListView; import com.hupu.games.view.XListView.IXListViewListener; public class NewsFragment extends BaseFragment { private XListView mListNews; private NewsListAdapter mNewsAdapter; private LinkedList<NewsEntity> mNewsData; private long lastNewsId; /** 最后刷新的时间 */ private long mLastNewsTime; /***/ private static final long TEN_MINS = 120000; /***/ boolean bNeedFresh; int mode = -1; private int methodNews; private int methodNewsNext; private String mTag; String cnTag; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // methodNews = HuPuRes.REQ_METHOD_GET_NBA_NEWS; // methodNewsNext = HuPuRes.REQ_METHOD_GET_NBA_NEWS_NEXT; if(mTag==null) { mTag = getArguments().getString("tag"); cnTag = getArguments().getString("cnTag"); setMode(getArguments().getInt("mode")); } } public void onResume(){ super.onResume(); mNewsAdapter.notifyDataSetChanged(); } public void setMode(int m) { mLastNewsTime = 0; // if(m==mode) // return; mode = m; if (mode == 0) { methodNews = HuPuRes.REQ_METHOD_GET_NBA_NEWS; methodNewsNext = HuPuRes.REQ_METHOD_GET_NBA_NEWS_NEXT; } else if (mode == 1) { methodNews = HuPuRes.REQ_METHOD_GET_CBA_NEWS; methodNewsNext = HuPuRes.REQ_METHOD_GET_CBA_NEWS_NEXT; } else { // 足球和杯赛 methodNews = HuPuRes.REQ_METHOD_GET_FOOTBALL_NEWS; methodNewsNext = HuPuRes.REQ_METHOD_GET_FOOTBALL_NEWS_NEXT; } if (mNewsAdapter != null) { mNewsAdapter.clear(); // mListNews.setFreshState(); } if (mListNews != null) mListNews.setPullLoadEnable(true, false); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.fragment_news, container, false); mListNews = (XListView) v.findViewById(R.id.list_news); ((TextView) mListNews.mFooterView .findViewById(R.id.xlistview_footer_text)) .setText(getString(R.string.no_more_news)); Log.d("News", "onCreateView"); if (mNewsAdapter == null) { mNewsAdapter = new NewsListAdapter(getActivity()); reqNewData(true); mNewsAdapter.setAct(mAct); } ListClick listClick = new ListClick(); mListNews.setOnItemClickListener(listClick); mListNews.setXListViewListener(new pullListener()); mListNews.setAdapter(mNewsAdapter); // 初始化时不需要刷新 if (mNewsAdapter.getCount() > 0) { mListNews.setPullLoadEnable(true, false); } else mListNews.setPullLoadEnable(false, false); return v; } /** 获取最新数据 */ public void reqNewData(boolean isMan) { if (!isMan) mListNews.setFreshState(); reqNewsData(methodNews, 0); } int page; /** 获取更多数据 */ public void reqMoreData() { reqNewsData(methodNewsNext, lastNewsId); } /** 请求新闻数据 */ private void reqNewsData(int reqId, long nId) { mParams = mAct.getHttpParams(true); if (!mAct.isActiveFragment(this)) { mParams.put("preload", "1"); } if (nId > 0) mParams.put("nid", "" + nId); switch (reqId) { case HuPuRes.REQ_METHOD_GET_NBA_NEWS_NEXT: case HuPuRes.REQ_METHOD_GET_CBA_NEWS_NEXT: case HuPuRes.REQ_METHOD_GET_FOOTBALL_NEWS_NEXT: mParams.put("direc", "next"); break; } // // mAct.sendRequest(reqId, mParams); // if (mode < 2) // // mAct.sendRequest(reqId, mParams); // mAct.sendAppRequest(reqId, null, mParams, new FragmentHttpResponseHandler()); // else // // mAct.sendTagRequest(reqId, mParams); HupuLog.e("papa", "-----mtag="+mTag+"----cntag="+cnTag+"---reqid="+reqId); mAct.sendAppRequest(reqId, mTag, mParams, new FragmentHttpResponseHandler()); } /** * 由其他的页面切换进入 * */ public void entry() { // Log.d("News", "entry" +mLastNewsTime); if (mNewsAdapter != null) { long curTime = System.currentTimeMillis(); if (mLastNewsTime == 0 || curTime - mLastNewsTime > TEN_MINS) { bNeedFresh = true; } if (bNeedFresh && !isToRead) { reqNewData(false); } isToRead = false; } } /** * 赋值并刷新 * */ public void setData(int method, Object o) { NewsResp resp = (NewsResp) o; // Log.d("data size=", ""+resp.mList.size()); if (resp.nextDataExists > 0) mListNews.setPullLoadEnable(true, false); else { mListNews.setPullLoadEnable(false, true); if (methodNewsNext == method) mAct.showToast("没有更多新闻了"); } if (method == methodNewsNext) { if (mNewsData == null) method = methodNews; } else { HupuLog.e("papa", "加载了新闻"); mListNews.setPullLoadEnable(true, true); mLastNewsTime = System.currentTimeMillis(); bNeedFresh = false; } if (method == methodNewsNext) { // mNewsData.addAll(0, resp.mList); if (resp.mList != null) mNewsData.addAll(resp.mList); } else { mNewsData = resp.mList; page = 0; } if (resp != null) { lastNewsId = resp.lastNId; } mNewsAdapter.setData(mNewsData); } /** 停止加载动画 */ public void stopLoad(boolean bDelay) { // Log.d("video", "stopLoad"); if (mListNews != null) { mListNews.stopRefresh(); mListNews.stopLoadMore(); } } /** 设置listview 上拉和下拉的监听 */ class pullListener implements IXListViewListener { @Override public void onRefresh() { reqNewData(true); } @Override public void onLoadMore() { reqMoreData(); } } private boolean isToRead = false; /** 设置listview点击监听器 */ class ListClick implements OnItemClickListener { @Override public void onItemClick(AdapterView<?> arg0, View v, int pos, long arg3) { if (pos < 1) return; if (mAct.mApp.getIsRead((int) mNewsAdapter.getItem(pos - 1).nid) != 1) { mAct.mApp.insertIsRead((int) mNewsAdapter.getItem(pos - 1).nid); } Intent in = new Intent(getActivity(), NewsDetailActivity.class); in.putExtra("nid", mNewsAdapter.getItem(pos - 1).nid); in.putExtra("reply", mNewsAdapter.getItem(pos - 1).replies); in.putExtra("tag", mTag); // in.putExtra("mode", mode); in.putExtra("cntag", cnTag); startActivity(in); isToRead = true; } } @Override public void onSuccess(Object o, int reqType) { stopLoad(false); if (o != null) setData(reqType, o); } public void onFailure(Throwable error, int reqType) { stopLoad(false); } }