package org.qii.weiciyuan.ui.userinfo; import org.qii.weiciyuan.R; import org.qii.weiciyuan.bean.MessageBean; import org.qii.weiciyuan.bean.MessageListBean; import org.qii.weiciyuan.bean.UserBean; import org.qii.weiciyuan.bean.android.AsyncTaskLoaderResult; import org.qii.weiciyuan.support.utils.AppConfig; import org.qii.weiciyuan.support.utils.GlobalContext; import org.qii.weiciyuan.ui.basefragment.AbstractMessageTimeLineFragment; import org.qii.weiciyuan.ui.browser.BrowserWeiboMsgActivity; import org.qii.weiciyuan.ui.loader.StatusesByIdLoader; import android.content.Intent; import android.os.Bundle; import android.os.Handler; import android.support.v4.content.Loader; import android.view.MenuItem; import android.view.View; import android.widget.AdapterView; /** * User: Jiang Qi * Date: 12-8-16 */ public class StatusesByIdTimeLineFragment extends AbstractMessageTimeLineFragment<MessageListBean> { protected UserBean userBean; protected String token; private MessageListBean bean = new MessageListBean(); public static StatusesByIdTimeLineFragment newInstance(UserBean userBean, String token) { StatusesByIdTimeLineFragment fragment = new StatusesByIdTimeLineFragment(); Bundle bundle = new Bundle(); bundle.putParcelable("userBean", userBean); bundle.putString("token", token); fragment.setArguments(bundle); return fragment; } public StatusesByIdTimeLineFragment() { } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); userBean = getArguments().getParcelable("userBean"); token = getArguments().getString("token"); } @Override public MessageListBean getList() { return bean; } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { if (data == null) { return; } MessageBean msg = (MessageBean) data.getParcelableExtra("msg"); if (msg != null) { for (int i = 0; i < getList().getSize(); i++) { if (msg.equals(getList().getItem(i))) { getList().getItem(i).setReposts_count(msg.getReposts_count()); getList().getItem(i).setComments_count(msg.getComments_count()); break; } } getAdapter().notifyDataSetChanged(); } } @Override public void onResume() { super.onResume(); if (userBean != null && userBean.getId() != null && userBean.getId().equals(GlobalContext.getInstance().getCurrentAccountId())) { GlobalContext.getInstance() .registerForAccountChangeListener(myProfileInfoChangeListener); } } @Override public void onDestroy() { super.onDestroy(); GlobalContext.getInstance().unRegisterForAccountChangeListener(myProfileInfoChangeListener); } private GlobalContext.MyProfileInfoChangeListener myProfileInfoChangeListener = new GlobalContext.MyProfileInfoChangeListener() { @Override public void onChange(UserBean newUserBean) { for (MessageBean msg : getList().getItemList()) { msg.setUser(newUserBean); } getAdapter().notifyDataSetChanged(); } }; @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putParcelable("bean", getList()); outState.putParcelable("userBean", userBean); outState.putString("token", token); } @Override public void onActivityCreated(Bundle savedInstanceState) { switch (getCurrentState(savedInstanceState)) { case FIRST_TIME_START: new Handler().postDelayed(new Runnable() { @Override public void run() { if (getActivity() != null) { getPullToRefreshListView().setRefreshing(); loadNewMsg(); } } }, AppConfig.REFRESH_DELAYED_MILL_SECOND_TIME); break; case SCREEN_ROTATE: //nothing refreshLayout(getList()); break; case ACTIVITY_DESTROY_AND_CREATE: getList().replaceData((MessageListBean) savedInstanceState.getParcelable("bean")); userBean = (UserBean) savedInstanceState.getParcelable("userBean"); token = savedInstanceState.getString("token"); getAdapter().notifyDataSetChanged(); refreshLayout(getList()); break; } super.onActivityCreated(savedInstanceState); } protected void listViewItemClick(AdapterView parent, View view, int position, long id) { startActivityForResult( BrowserWeiboMsgActivity.newIntent(getList().getItem(position), GlobalContext.getInstance().getSpecialToken()), 0); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.menu_refresh: getPullToRefreshListView().setRefreshing(); loadNewMsg(); return true; } return super.onOptionsItemSelected(item); } @Override protected void newMsgLoaderSuccessCallback(MessageListBean newValue, Bundle loaderArgs) { if (getActivity() != null && newValue.getSize() > 0) { getList().addNewData(newValue); getAdapter().notifyDataSetChanged(); getListView().setSelectionAfterHeaderView(); getActivity().invalidateOptionsMenu(); } } @Override protected void oldMsgLoaderSuccessCallback(MessageListBean newValue) { if (newValue != null && newValue.getSize() > 1) { getList().addOldData(newValue); getActivity().invalidateOptionsMenu(); } } protected Loader<AsyncTaskLoaderResult<MessageListBean>> onCreateNewMsgLoader(int id, Bundle args) { String uid = userBean.getId(); String screenName = userBean.getScreen_name(); String sinceId = null; if (getList().getItemList().size() > 0) { sinceId = getList().getItemList().get(0).getId(); } return new StatusesByIdLoader(getActivity(), uid, screenName, token, sinceId, null); } protected Loader<AsyncTaskLoaderResult<MessageListBean>> onCreateMiddleMsgLoader(int id, Bundle args, String middleBeginId, String middleEndId, String middleEndTag, int middlePosition) { String uid = userBean.getId(); String screenName = userBean.getScreen_name(); return new StatusesByIdLoader(getActivity(), uid, screenName, token, middleBeginId, middleEndId); } protected Loader<AsyncTaskLoaderResult<MessageListBean>> onCreateOldMsgLoader(int id, Bundle args) { String uid = userBean.getId(); String screenName = userBean.getScreen_name(); String maxId = null; if (getList().getSize() > 0) { maxId = getList().getItemList().get(getList().getSize() - 1).getId(); } return new StatusesByIdLoader(getActivity(), uid, screenName, token, null, maxId); } }