package org.aisen.weibo.sina.ui.fragment.comment; import java.util.ArrayList; import java.util.List; import org.aisen.weibo.sina.R; import org.aisen.weibo.sina.support.paging.CommentsPagingProcessor; 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.activity.comment.TimelineCommentsActivity; import org.aisen.weibo.sina.ui.component.CommentItemView; import org.aisen.weibo.sina.ui.component.TimelineItemView; import org.aisen.weibo.sina.ui.fragment.base.ARefreshProxyFragment; import org.aisen.weibo.sina.ui.fragment.base.BizFragment; import org.sina.android.SinaSDK; import org.sina.android.bean.StatusComment; import org.sina.android.bean.StatusComments; import org.sina.android.bean.StatusContent; import android.os.Bundle; import android.text.TextUtils; import android.view.View; import android.widget.AdapterView; import android.widget.TextView; import android.widget.AdapterView.OnItemClickListener; import android.widget.AdapterView.OnItemLongClickListener; import android.widget.ListView; import com.m.common.params.Params; import com.m.support.adapter.ABaseAdapter.AbstractItemView; import com.m.support.paging.IPaging; import com.m.support.task.TaskException; import com.m.ui.activity.AViewpagerActivity; import com.m.ui.fragment.ABaseFragment; /** * 微博评论界面<br/> * 普通模式展示 * * @author wangdan * */ public class TimelineCommentsFragment extends ARefreshProxyFragment<StatusComment, StatusComments> implements OnItemClickListener, OnItemLongClickListener { public static void launch(ABaseFragment from, StatusContent status) { TimelineCommentsActivity.launch(from, status); } public static ABaseFragment newInstance(StatusContent status) { TimelineCommentsFragment fragment = new TimelineCommentsFragment(); Bundle args = new Bundle(); args.putSerializable("bean", status); fragment.setArguments(args); return fragment; } private StatusContent mStatusContent; private View headerView; private View headerDivider; @Override protected int inflateContentView() { return R.layout.ui_timeline_comments; } @Override protected RefreshListType configListType() { return RefreshListType.actionbarPulltorefresh; } @Override protected void initRefreshList(Bundle savedInstanceState) { super.initRefreshList(savedInstanceState); 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_cmt)); AisenUtil.setDivider(headerDivider); mStatusContent = savedInstanceState == null ? (StatusContent) getArguments().getSerializable("bean") : (StatusContent) savedInstanceState.getSerializable("bean"); timelineItem.bindingData(headerView, mStatusContent); listView.setOnItemClickListener(this); listView.setOnItemLongClickListener(this); if (savedInstanceState == null) { listView.postDelayed(new Runnable() { @Override public void run() { listView.setSelectionFromTop(2, 0); } }, 10); } } public int refreshLayoutInfo() { return R.id.layList; } @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putSerializable("bean", mStatusContent); } @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { ListView listView = (ListView) getRefreshView(); position -= listView.getHeaderViewsCount(); if (position >= 0 && position < getAdapter().getCount()) BizFragment.getBizFragment(this).replyComment(mStatusContent, getAdapterItems().get(position)); } @Override public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) { view.findViewById(R.id.btnMenus).performClick(); return true; } @Override protected IPaging<StatusComment, StatusComments> configPaging() { return new CommentsPagingProcessor(); } @Override protected AbstractItemView<StatusComment> newItemView() { return new CommentItemView(this, mStatusContent); } @Override protected void requestData(RefreshMode mode) { new TimelineCommentTask(mode).execute(); } class TimelineCommentTask extends PagingTask<Void, Void, StatusComments> { public TimelineCommentTask(RefreshMode mode) { super("TimelineCommentTask", mode); } @Override protected StatusComments workInBackground(RefreshMode mode, String previousPage, String nextPage, Void... p) throws TaskException { Params params = new Params(); if ((mode == RefreshMode.refresh || mode == RefreshMode.reset) && !TextUtils.isEmpty(previousPage)) params.addParameter("since_id", previousPage); if (mode == RefreshMode.update && !TextUtils.isEmpty(nextPage)) params.addParameter("max_id", nextPage); params.addParameter("id", mStatusContent.getId()); params.addParameter("count", String.valueOf(AppSettings.getCommentCount())); return SinaSDK.getInstance(AppContext.getToken()).commentsShow(params); } @Override protected List<StatusComment> parseResult(StatusComments result) { return result.getComments(); } @Override protected boolean handleResult(RefreshMode mode, List<StatusComment> datas) { // 如果是重置或者刷新数据,加载数据大于分页大小,则清空之前的数据 if (mode == RefreshMode.reset || mode == RefreshMode.refresh) // 目前微博加载分页大小是默认大小 if (datas.size() >= AppSettings.getCommentCount()) { setAdapterItems(new ArrayList<StatusComment>()); return true; } return super.handleResult(mode, datas); } @Override protected void onFinished() { super.onFinished(); ListView listView = (ListView) getRefreshView(); // 第一次加载完数据,将评论置顶 if (mode == RefreshMode.reset) listView.setSelectionFromTop(listView.getFooterViewsCount(), 0); } @Override protected void onFailure(TaskException exception) { super.onFailure(exception); showMessage(exception.getMessage()); } } @Override public boolean onAcUnusedDoubleClicked() { if (getActivity() instanceof AViewpagerActivity) { AViewpagerActivity activity = (AViewpagerActivity) getActivity(); if (activity.getCurrentFragment() == this) return super.onAcUnusedDoubleClicked(); else return false; } return super.onAcUnusedDoubleClicked(); } }