package org.aisen.weibo.sina.ui.fragment.timeline; import org.aisen.weibo.sina.R; import org.aisen.weibo.sina.support.utils.AisenUtil; import org.aisen.weibo.sina.support.utils.AppContext; import org.aisen.weibo.sina.support.utils.AppSettings; import org.aisen.weibo.sina.ui.component.TimelineItemView; import org.sina.android.SinaSDK; import org.sina.android.bean.StatusContent; import org.sina.android.bean.StatusContents; import org.sina.android.bean.StatusRepost; import android.os.Bundle; import android.text.TextUtils; import android.view.View; import android.widget.ListView; import android.widget.TextView; import com.m.common.params.Params; import com.m.support.adapter.ABaseAdapter.AbstractItemView; import com.m.support.task.TaskException; import com.m.ui.fragment.ABaseFragment; /** * 某条原创微博的转发微博 * * @author wangdan * */ public class RepostTimelineFragment extends ATimelineFragment { public static ABaseFragment newInstance(StatusContent status) { RepostTimelineFragment fragment = new RepostTimelineFragment(); Bundle args = new Bundle(); args.putSerializable("status", status); fragment.setArguments(args); return fragment; } private View headerView; private View headerDivider; private StatusContent mStatusContent; @Override protected int inflateContentView() { return R.layout.ui_repost_timeline; } @Override protected RefreshListType configListType() { return RefreshListType.actionbarPulltorefresh; } public int refreshLayoutInfo() { return R.id.layContent; } @Override protected void initRefreshList(Bundle savedInstanceSate) { super.initRefreshList(savedInstanceSate); final ListView listView = (ListView) getRefreshView(); TimelineItemView timelineItem = new TimelineItemView(this, true); View view = View.inflate(getActivity(), timelineItem.inflateViewId(), null); timelineItem.bindingView(view); view.setTag(timelineItem); listView.addHeaderView(view); headerView = view; headerDivider = View.inflate(getActivity(), R.layout.lay_divider, null); listView.addHeaderView(headerDivider); // headerDivider.setVisibility(View.GONE); TextView txtDivider = (TextView) headerDivider.findViewById(R.id.txtDivider); txtDivider.setText(getString(R.string.timelinecmt_divider_status)); AisenUtil.setDivider(headerDivider); mStatusContent = savedInstanceSate == null ? (StatusContent) getArguments().getSerializable("status") : (StatusContent) savedInstanceSate.getSerializable("status"); if (savedInstanceSate == null) { listView.postDelayed(new Runnable() { @Override public void run() { listView.setSelectionFromTop(2, 0); } }, 10); } } @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putSerializable("status", mStatusContent); } @Override public void onResume() { super.onResume(); TimelineItemView timelineItem = (TimelineItemView) headerView.getTag(); if (timelineItem != null) timelineItem.bindingData(headerView, mStatusContent); // timelineItem.bindingData(headerView, mStatusContent.getRetweeted_status() != null ? // mStatusContent.getRetweeted_status() : // mStatusContent); } @Override protected AbstractItemView<StatusContent> newItemView() { return new TimelineItemView(this, mStatusContent, false); } @Override protected void requestData(RefreshMode mode) { new RepostTimeTask(mode).execute(); } class RepostTimeTask extends TimelineTask { public RepostTimeTask(RefreshMode mode) { super(mode); } @Override protected StatusContents workInBackground(RefreshMode mode, String previousPage, String nextPage, Void... p) throws TaskException { Params params = new Params(); if (mode == RefreshMode.refresh && !TextUtils.isEmpty(previousPage)) params.addParameter("since_id", previousPage); if (mode == RefreshMode.update && !TextUtils.isEmpty(nextPage)) params.addParameter("max_id", nextPage); // String statusId = mStatusContent.getRetweeted_status() == null ? mStatusContent.getId() : mStatusContent.getRetweeted_status().getId(); String statusId = mStatusContent.getId(); params.addParameter("id", statusId); params.addParameter("count", String.valueOf(AppSettings.getTimelineCount())); StatusRepost statusRepost = SinaSDK.getInstance(AppContext.getToken()).statusRepostTimeline(params); if (statusRepost != null) { for (StatusContent status : statusRepost.getReposts()) { status.setRetweeted_status(null); } return new StatusContents(statusRepost.getReposts()); } return null; } } }