package org.aisen.weibo.sina.ui.fragment.timeline; import java.util.ArrayList; import org.aisen.weibo.sina.R; import org.aisen.weibo.sina.support.bean.TimelineGroupBean; import org.aisen.weibo.sina.support.cache.FavoritesCacheUtility; import org.aisen.weibo.sina.support.utils.AppContext; import org.aisen.weibo.sina.support.utils.AppSettings; import org.aisen.weibo.sina.support.utils.BaiduAnalyzeUtils; import org.sina.android.SinaSDK; import org.sina.android.bean.Favorities; import org.sina.android.bean.Favority; import org.sina.android.bean.StatusContent; import org.sina.android.bean.StatusContents; import android.app.Activity; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.os.Bundle; import com.m.common.context.GlobalContext; import com.m.support.paging.IPaging; import com.m.support.paging.PageIndexPaging; import com.m.support.task.TaskException; import com.m.ui.fragment.ABaseFragment; /** * 用户收藏微博 * * @author Jeff.Wang * * @date 2014年9月18日 */ public class FavoritesFragment extends ATimelineFragment { public static ABaseFragment newInstance() { FavoritesFragment fragment = new FavoritesFragment(); TimelineGroupBean bean = new TimelineGroupBean(); bean.setGroup("7"); bean.setTitle(GlobalContext.getInstance().getResources().getString(R.string.draw_fav_title)); bean.setType("7"); Bundle args = new Bundle(); args.putSerializable("bean", bean); fragment.setArguments(args); return fragment; } @Override protected RefreshListType configListType() { return RefreshListType.androidPulltorefresh; } @Override protected void config(RefreshConfig config) { super.config(config); config.savePosition = false; } @Override protected void requestData(RefreshMode mode) { new FavoritesTask(mode == RefreshMode.refresh ? RefreshMode.reset : mode).execute(); } @Override protected IPaging<StatusContent, StatusContents> configPaging() { return new PageIndexPaging<StatusContent, StatusContents>("total_number"); } class FavoritesTask extends TimelineTask { FavoritesTask(RefreshMode mode) { super(mode); } @Override protected StatusContents workInBackground(RefreshMode mode, String previousPage, String nextPage, Void... params) throws TaskException { Favorities favorities = SinaSDK.getInstance(AppContext.getToken(), getTaskCacheMode(this)).favorites(nextPage, String.valueOf(AppSettings.getTimelineCount())); StatusContents statusContents = new StatusContents(new ArrayList<StatusContent>()); for (Favority favority : favorities.getFavorites()) { statusContents.getStatuses().add(favority.getStatus()); } statusContents.setCache(favorities.isCache()); statusContents.setExpired(favorities.expired()); // 如果是重置数据,就判断新加载的数据是否是全部加载完了 int total = mode == RefreshMode.reset ? 0 : getAdapter().getCount(); total += favorities.getFavorites().size(); if (total >= favorities.getTotal_number()) statusContents.setNoMore(true); return statusContents; } } @Override public void onResume() { super.onResume(); IntentFilter filter = new IntentFilter(); filter.addAction("org.aisen.weibo.sina.FAV_DESTORY"); getActivity().registerReceiver(receiver, filter); BaiduAnalyzeUtils.onPageStart("收藏的微博"); } @Override public void onPause() { super.onPause(); getActivity().unregisterReceiver(receiver); BaiduAnalyzeUtils.onPageEnd("收藏的微博"); } // 接收来自BizFragment的删除(溢出菜单) private BroadcastReceiver receiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { if (intent != null && "org.aisen.weibo.sina.FAV_DESTORY".equals(intent.getAction())) { String statusId = intent.getStringExtra("statusId"); destoryFav(statusId); } } }; @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); // 详情页面的取消收藏 if (resultCode == Activity.RESULT_OK && requestCode == 1000) { String statusId = data.getStringExtra("statusId"); destoryFav(statusId); } } private void destoryFav(String statusId) { for (StatusContent status : getAdapterItems()) { if (status.getId().equals(statusId)) { // 更新ListView getAdapterItems().remove(status); notifyDataSetChanged(); FavoritesCacheUtility.destory(statusId); break; } } } }