package cn.scau.scautreasure.ui; import android.support.v4.widget.SwipeRefreshLayout; import android.view.View; import android.widget.*; import cn.scau.scautreasure.AppConstant; import cn.scau.scautreasure.R; import cn.scau.scautreasure.adapter.NoticeAdapter; import cn.scau.scautreasure.api.NoticeApi; import cn.scau.scautreasure.helper.UIHelper; import cn.scau.scautreasure.model.NoticeModel; import cn.scau.scautreasure.model.ParamModel; import cn.scau.scautreasure.util.CacheUtil; import cn.scau.scautreasure.widget.NoticeHeaderWidget_; import com.devspark.appmsg.AppMsg; import com.handmark.pulltorefresh.library.PullToRefreshBase; import com.handmark.pulltorefresh.library.PullToRefreshListView; import org.androidannotations.annotations.*; import org.androidannotations.annotations.rest.RestService; import org.springframework.web.client.HttpStatusCodeException; import java.util.ArrayList; import static cn.scau.scautreasure.helper.UIHelper.LISTVIEW_EFFECT_MODE.*; /** * 校园通知列表; * User: special * Date: 13-8-27 * Time: 下午2:14 * Mail: [email protected] */ @EActivity ( R.layout.notice ) public class Notice extends CommonActivity { @RestService NoticeApi api; @ViewById ImageView notice_iv; @ViewById( R.id.listView ) PullToRefreshListView _listView; @ViewById SwipeRefreshLayout swipe_refresh; private int page; private int count; private NoticeAdapter listAdapter; private final static String cacheKey = "notice_lastest_news"; private boolean isFromCache = true; @Override void initActionBar(){ // 由于隐藏了标题栏,所以要覆盖初始化actionbar的函数 // 否则空指针 } @AfterViews void init(){ getSupportActionBar().hide(); View header = NoticeHeaderWidget_.build(getSherlockActivity()); _listView.setOnRefreshListener(onRefreshListener); _listView.setOnItemClickListener(onListViewItemClicked); _listView.getRefreshableView().addHeaderView(header); setSwipeRefresh(); loadCacheData(); swipe_refresh.setRefreshing(true); page = 1; loadData(); } private void setSwipeRefresh() { swipe_refresh.setEnabled(false); // 顶部刷新的样式 swipe_refresh.setColorScheme(R.color.swipe_refresh_1, R.color.swipe_refresh_2, R.color.swipe_refresh_3, R.color.swipe_refresh_4); } // 加载缓存的通知,并且载入时显示; void loadCacheData(){ CacheUtil cacheUtil = CacheUtil.get(getSherlockActivity()); NoticeModel.NoticeList l = (NoticeModel.NoticeList) cacheUtil.getAsObject(this.cacheKey); if(l != null) showSuccessResult(l); } /** * listView选中: */ private AdapterView.OnItemClickListener onListViewItemClicked = new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long l) { app.Log("position : " + position ); if(position != 1) { NoticeModel notice = (NoticeModel) parent.getAdapter().getItem(position); NoticeDetail_.intent(getSherlockActivity()) .title(notice.getTitle()) .time(notice.getTime()) .url(notice.getUrl()) .start(); } } }; /** * listView下拉刷新; */ private PullToRefreshBase.OnRefreshListener onRefreshListener = new PullToRefreshBase.OnRefreshListener() { @Override public void onRefresh(PullToRefreshBase refreshView) { if(page < Math.ceil(count/10)){ page++; loadData(); }else{ AppMsg.makeText(getSherlockActivity(), R.string.tips_default_last, AppMsg.STYLE_CONFIRM).show(); refreshView.setRefreshing(false); } } }; @UiThread void showSuccessResult(NoticeModel.NoticeList l){ // new search if(listAdapter == null){ count = l.getCount(); listAdapter = new NoticeAdapter(getSherlockActivity(), R.layout.notice_listitem,l.getNotice()); ListView lv = _listView.getRefreshableView(); adapter = UIHelper.buildEffectAdapter(listAdapter, lv, ALPHA); _listView.setAdapter(listAdapter); swipe_refresh.setRefreshing(false); if (isFromCache){ // 置空adapter, 可以使得下面从网络加载数据后,自动清除 // 缓存的数据,置入从网络加载的数据; listAdapter = null; isFromCache = false; } }else{ // next page; listAdapter.addAll(l.getNotice()); listAdapter.notifyDataSetChanged(); adapter.notifyDataSetChanged(); } _listView.onRefreshComplete(); } @Background( id = UIHelper.CANCEL_FLAG ) void loadData(Object... params) { try{ NoticeModel.NoticeList l = api.getList(page); cacheLastestNotice(l); showSuccessResult(l); }catch (HttpStatusCodeException e){ showErrorResult(getSherlockActivity(), e.getStatusCode().value()); }catch (Exception e){ handleNoNetWorkError(getSherlockActivity()); } } // 缓存最新的通知信息; @Background void cacheLastestNotice(NoticeModel.NoticeList noticeList){ // 只缓存最新的通知 if(page != 1) return; CacheUtil cacheUtil = CacheUtil.get(getSherlockActivity()); if(noticeList.getCount() != 0) cacheUtil.put(this.cacheKey, noticeList); } }