package jp.gr.procon.proconapp.ui.fragment; import android.app.Activity; import android.os.AsyncTask; import android.os.Bundle; import android.support.v4.app.Fragment; import jp.gr.procon.proconapp.api.NoticeDetailApi; import jp.gr.procon.proconapp.model.NoticeDetail; public class ObtainNoticeDetailFragment extends BaseFragment { private static final String ARG_NOTICE_ID = "arg_notice_id"; public interface OnObtainNewsDetailListener { void onObtainNewsDetail(NoticeDetail noticeDetail); void onFailedObtainNewsDetail(); } private long mNoticeId; private NoticeDetail mNoticeDetail; private ApiAsyncTask mApiAsyncTask; private OnObtainNewsDetailListener mOnObtainNewsDetailListener; public static ObtainNoticeDetailFragment newInstance(long noticeId) { ObtainNoticeDetailFragment fragment = new ObtainNoticeDetailFragment(); Bundle args = new Bundle(); args.putLong(ARG_NOTICE_ID, noticeId); fragment.setArguments(args); return fragment; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (getArguments() != null) { mNoticeId = getArguments().getLong(ARG_NOTICE_ID); } } @Override public void onResume() { super.onResume(); if (mNoticeDetail == null) { startApiAsyncTask(); } } @Override public void onPause() { if (mApiAsyncTask != null) { mApiAsyncTask.cancel(true); mApiAsyncTask = null; } super.onPause(); } @Override public void onAttach(Activity activity) { super.onAttach(activity); Fragment fragment = getParentFragment(); if (fragment != null && fragment instanceof OnObtainNewsDetailListener) { mOnObtainNewsDetailListener = (OnObtainNewsDetailListener) fragment; } else if (activity instanceof OnObtainNewsDetailListener) { mOnObtainNewsDetailListener = (OnObtainNewsDetailListener) activity; } else { throw new RuntimeException("parent or activity must implement listener"); } } @Override public void onDetach() { super.onDetach(); mOnObtainNewsDetailListener = null; } private void startApiAsyncTask() { if (mApiAsyncTask != null) { return; } mApiAsyncTask = new ApiAsyncTask(); mApiAsyncTask.execute(mNoticeId); } private class ApiAsyncTask extends AsyncTask<Long, Void, NoticeDetailApi.GetRequest> { @Override protected void onPreExecute() { super.onPreExecute(); } @Override protected NoticeDetailApi.GetRequest doInBackground(Long... params) { return new NoticeDetailApi.GetRequest(getUserToken()).get(Long.toString(params[0])); } @Override protected void onPostExecute(NoticeDetailApi.GetRequest api) { super.onPostExecute(api); if (isDetached() || getArguments() == null) { return; } if (api.isSuccessful()) { mNoticeDetail = api.getResponseObj(); if (mOnObtainNewsDetailListener != null) { mOnObtainNewsDetailListener.onObtainNewsDetail(mNoticeDetail); } } else { if (mOnObtainNewsDetailListener != null) { mOnObtainNewsDetailListener.onFailedObtainNewsDetail(); } } } @Override protected void onCancelled(NoticeDetailApi.GetRequest getRequest) { super.onCancelled(getRequest); if (mOnObtainNewsDetailListener != null) { mOnObtainNewsDetailListener.onFailedObtainNewsDetail(); } } } }