package edu.hebtu.movingcampus.view; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; import android.annotation.SuppressLint; import android.app.Activity; import android.content.res.Resources; import android.os.Bundle; import android.os.Handler; import android.os.Looper; import android.os.Message; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import edu.hebtu.movingcampus.R; import edu.hebtu.movingcampus.activity.wrapper.IPreference; import edu.hebtu.movingcampus.adapter.NewsListAdapter; import edu.hebtu.movingcampus.biz.NewsDao; import edu.hebtu.movingcampus.entity.NewsShort; import edu.hebtu.movingcampus.utils.LogUtil; import edu.hebtu.movingcampus.utils.TimeUtil; @SuppressLint({ "NewApi", "SimpleDateFormat" }) public class NewsFragment extends BaseListFragment { public Activity mActivity; private String page; public boolean loaded=false; private NewsListAdapter mAdapter; private List<NewsShort>loadMoreEntity; private List<NewsShort> mlist; private static SimpleDateFormat mDateFormat; private TimeUtil timer; // private DisplayImageOptions options; static { Looper.prepare(); } private Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch (msg.what) { case 0: updateTextTime(); mAdapter.appendToList(loadMoreEntity); loaded=true; break; case 1: loaded=true; listview.getFooterView().updateFooterTextNoMore(); break; default : loaded=false; break; } onStopLoad(); } }; // add this constructor by King0769, 2013/5/7 // in order to solve an exception that "can't instantiate class cn.eoe.app.view.NewsFragment; no empty constructor" // I found it in this case : 1.open eoe program -> 2.change system language -> 3.reopen eoe, can see FC(force close) // I think this bug will happens in many cases. public NewsFragment() { super(); page="0"; if (mDateFormat == null) { mDateFormat = new SimpleDateFormat("MM月dd日"); } } //-------------------- public static NewsFragment getInstance(String page,Activity activty){ NewsFragment nf=new NewsFragment(); nf.mActivity=activty; nf.page=page; LogUtil.w("page", page+""); nf.mlist=IPreference.getInstance(activty).getListOfNewsSubjectByID(Integer.parseInt(page)+1).dump(activty); return nf; } private void updateTextTime() { boolean isAdded = isAdded(); if (!isAdded) {//avoid java.lang.IllegalStateException: Fragment BaseFragment{44b01260} not attached to Activity return; } if(timer.getUpdateTime()== 0) {//初始化更新 listview.setRefreshTime(getResources().getString(R.string.listview_header_last_time)); } else {//其他 long diffTimeSecs = (System.currentTimeMillis() - timer.getUpdateTime()) / 1000; //1min = 60s ; 1h = 60min if (diffTimeSecs < 3600) {//一小时内,显示分钟 Resources resources = getResources(); if (resources != null) { listview.setRefreshTime(resources.getString( R.string.listview_header_last_time_for_min, diffTimeSecs < 60 ? 1 : diffTimeSecs / 60)); } } else { long diffTimeHours = diffTimeSecs / 3600; if(diffTimeHours < 24) {//一天内更新,显示小时 listview.setRefreshTime(getResources().getString( R.string.listview_header_last_time_for_hour, diffTimeHours)); } else if(diffTimeHours == 24) {//一天更新,显示1天 listview.setRefreshTime(getResources().getString( R.string.listview_header_last_time_for_day, 1)); } else {//大于24小时显示xx月xx日 listview.setRefreshTime(getResources().getString( R.string.listview_header_last_time_for_date, mDateFormat.format(new Date(timer.getUpdateTime())))); } } } timer.updatePreferenceTime(); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { super.onCreateView(inflater, container, savedInstanceState); timer=new TimeUtil(getActivity(), getClass().getName()+"page"); updateTextTime(); listview.setXListViewListener(this); listview.setPullRefreshEnable(true); listview.setPullLoadEnable(true); // construct the RelativeLayout mAdapter = new NewsListAdapter(mActivity, R.layout.news_item, listview,mlist); mAdapter.appendToList(loadMoreEntity); listview.setAdapter(mAdapter); listview.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { NewsShort item = (NewsShort) mAdapter .getItem(position); startDetailActivity(mActivity, item.getID()+""); } }); return view; } public boolean toBeLoad(){ return mAdapter.getList()==null||mAdapter.getList().size()==0; } /** * 按时间排序 */ @Override public void onRefresh() { onStopLoad(); mAdapter.getList().clear(); onLoadMore(); } public List<NewsShort> onLoad(){ loadMoreEntity=new NewsDao(mActivity).mapperJson(true,(Integer.parseInt(page)+1)+"", (mlist.size()+1)+"",null); if (loadMoreEntity!= null) { mHandler.sendEmptyMessage(0); } return loadMoreEntity; } @Override public void onLoadMore() { new Thread() { @Override public void run() { loadMoreEntity=new NewsDao(mActivity).mapperJson(true,(Integer.parseInt(page)+1)+"", (mlist.size()+1)+"",null); if (loadMoreEntity!= null) { mHandler.sendEmptyMessage(0); }else mHandler.sendEmptyMessage(1); super.run(); } }.start(); } public String getPage(){ return page; } }