package org.qii.weiciyuan.ui.dm; import org.qii.weiciyuan.R; import org.qii.weiciyuan.bean.DMUserListBean; import org.qii.weiciyuan.bean.android.AsyncTaskLoaderResult; import org.qii.weiciyuan.support.database.DMDBTask; import org.qii.weiciyuan.support.lib.MyAsyncTask; import org.qii.weiciyuan.support.utils.GlobalContext; import org.qii.weiciyuan.support.utils.Utility; import org.qii.weiciyuan.ui.adapter.DMUserListAdapter; import org.qii.weiciyuan.ui.basefragment.AbstractTimeLineFragment; import org.qii.weiciyuan.ui.loader.DMUserLoader; import org.qii.weiciyuan.ui.main.LeftMenuFragment; import org.qii.weiciyuan.ui.main.MainTimeLineActivity; import android.app.ActionBar; import android.content.Intent; import android.os.Bundle; import android.support.v4.content.Loader; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.widget.AdapterView; /** * User: qii * Date: 12-11-14 */ public class DMUserListFragment extends AbstractTimeLineFragment<DMUserListBean> implements MainTimeLineActivity.ScrollableListFragment { private DMUserListBean bean = new DMUserListBean(); private DBCacheTask dbTask; public static DMUserListFragment newInstance() { DMUserListFragment fragment = new DMUserListFragment(); fragment.setArguments(new Bundle()); return fragment; } @Override public DMUserListBean getList() { return bean; } @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putParcelable("bean", bean); } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); setRetainInstance(true); setHasOptionsMenu(true); switch (getCurrentState(savedInstanceState)) { case FIRST_TIME_START: if (Utility.isTaskStopped(dbTask)) { dbTask = new DBCacheTask(); dbTask.executeOnExecutor(MyAsyncTask.THREAD_POOL_EXECUTOR); } break; case SCREEN_ROTATE: //nothing refreshLayout(getList()); break; case ACTIVITY_DESTROY_AND_CREATE: bean.addNewData((DMUserListBean) savedInstanceState.getParcelable("bean")); getAdapter().notifyDataSetChanged(); refreshLayout(getList()); break; } if ((((MainTimeLineActivity) getActivity()).getMenuFragment()).getCurrentIndex() == LeftMenuFragment.DM_INDEX) { buildActionBarAndViewPagerTitles(); } } @Override public void onDestroy() { super.onDestroy(); Utility.cancelTasks(dbTask); } @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); getListView().setDivider(null); } @Override public void onHiddenChanged(boolean hidden) { super.onHiddenChanged(hidden); if (!hidden) { buildActionBarAndViewPagerTitles(); } } public void buildActionBarAndViewPagerTitles() { ((MainTimeLineActivity) getActivity()).setCurrentFragment(this); if (Utility.isDevicePort()) { ((MainTimeLineActivity) getActivity()).setTitle(getString(R.string.dm)); getActivity().getActionBar().setIcon(R.drawable.ic_menu_message); } else { ((MainTimeLineActivity) getActivity()).setTitle(getString(R.string.dm)); getActivity().getActionBar().setIcon(R.drawable.ic_launcher); } getActivity().getActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD); getActivity().getActionBar().removeAllTabs(); } @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { super.onCreateOptionsMenu(menu, inflater); inflater.inflate(R.menu.actionbar_menu_dmuserlistfragment, menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.menu_write_dm: Intent intent = new Intent(getActivity(), DMSelectUserActivity.class); startActivityForResult(intent, 0); break; } return super.onOptionsItemSelected(item); } @Override protected void listViewItemClick(AdapterView parent, View view, int position, long id) { Intent intent = new Intent(getActivity(), DMActivity.class); intent.putExtra("user", bean.getItem(position).getUser()); startActivity(intent); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (data == null) { return; } Intent intent = new Intent(getActivity(), DMActivity.class); intent.putExtra("user", data.getParcelableExtra("user")); startActivity(intent); } @Override protected void buildListAdapter() { timeLineAdapter = new DMUserListAdapter(this, getList().getItemList(), getListView()); getListView().setAdapter(timeLineAdapter); } private class DBCacheTask extends MyAsyncTask<Void, DMUserListBean, DMUserListBean> { @Override protected void onPreExecute() { super.onPreExecute(); getPullToRefreshListView().setVisibility(View.INVISIBLE); } @Override protected DMUserListBean doInBackground(Void... params) { return DMDBTask.get(GlobalContext.getInstance().getCurrentAccountId()); } @Override protected void onPostExecute(DMUserListBean result) { super.onPostExecute(result); if (result != null) { getList().addNewData(result); } getPullToRefreshListView().setVisibility(View.VISIBLE); getAdapter().notifyDataSetChanged(); refreshLayout(getList()); if (getList().getSize() == 0) { getPullToRefreshListView().setRefreshing(); loadNewMsg(); } } } @Override protected void newMsgLoaderSuccessCallback(DMUserListBean newValue, Bundle loaderArgs) { if (newValue != null && newValue.getSize() > 0 && getActivity() != null) { getList().addNewData(newValue); getAdapter().notifyDataSetChanged(); getListView().setSelectionAfterHeaderView(); DMDBTask.asyncReplace(getList(), GlobalContext.getInstance().getCurrentAccountId()); } } @Override protected void oldMsgLoaderSuccessCallback(DMUserListBean newValue) { if (newValue != null && newValue.getSize() > 0 && getActivity() != null) { getList().addOldData(newValue); getAdapter().notifyDataSetChanged(); } } protected Loader<AsyncTaskLoaderResult<DMUserListBean>> onCreateNewMsgLoader(int id, Bundle args) { String token = GlobalContext.getInstance().getSpecialToken(); String cursor = String.valueOf(0); return new DMUserLoader(getActivity(), token, cursor); } protected Loader<AsyncTaskLoaderResult<DMUserListBean>> onCreateOldMsgLoader(int id, Bundle args) { String token = GlobalContext.getInstance().getSpecialToken(); String cursor = null; if (getList().getSize() > 0 && Integer.valueOf(getList().getNext_cursor()) == 0) { return null; } if (getList().getSize() > 0) { cursor = String.valueOf(getList().getNext_cursor()); } return new DMUserLoader(getActivity(), token, cursor); } @Override public void scrollToTop() { Utility.stopListViewScrollingAndScrollToTop(getListView()); } }