package com.streamlet.appui.base; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Toast; import com.android.volley.VolleyError; import com.streamlet.base.AppApplication; import com.streamlet.common.util.StringUtils; import com.streamlet.common.util.UIHelper; import com.streamlet.module.entity.base.CodeResponse; import com.streamlet.module.net.ConnectorCallBack; import com.streamlet.module.net.ConnectorManage; import com.streamlet.module.net.RequestManager; import java.lang.reflect.Field; public abstract class BaseFragment extends Fragment implements ConnectorCallBack { public AppApplication application; public BaseActivity activity; protected ConnectorManage connectorManage; protected String Tag = StringUtils.EMPTY; private Toast toast = null; protected LayoutInflater inflater; private View contentView; private Context context; private ViewGroup container; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); activity = (BaseActivity) getActivity(); application = (AppApplication) getActivity().getApplication(); connectorManage = ConnectorManage.getInstance(activity); context = getActivity().getApplicationContext(); Bundle b = getArguments(); onGetBundle(b); setTag(); } public void onGetBundle(Bundle bundle) { } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { this.inflater = inflater; this.container = container; onCreateView(savedInstanceState); if (contentView == null) { return super.onCreateView(inflater, container, savedInstanceState); } return contentView; } protected void onCreateView(Bundle savedInstanceState) { initUI(); initData(); } public void startActivityResult(int requestCode, Bundle bundle, Class c) { Intent intent = new Intent(); intent.putExtra("Bundle", bundle); intent.setClass(getContext(), c); startActivityForResult(intent, requestCode); } @Override public void onResume() { super.onResume(); connectorManage.addFragmentCallBack(this); } // Fragment不一样 @Override public void onDestroy() { super.onDestroy(); connectorManage.removeFragmentCallBack(this); RequestManager.getInstance(activity).getmRequestQueue().cancelAll(Tag); } public abstract void initUI(); public abstract void initData(); public abstract String setTag(); @Override public <T> void onHttpSuccess(long flag, String json, T response) { // TODO Auto-generated method stub } @Override public void onHttpError(long flag, VolleyError e, CodeResponse errorResponse) { // TODO Auto-generated method stub } /** * 默认时间LENGTH_LONG */ public void showToast(String msg) { UIHelper.showToast(activity, toast, msg); } /** * @param msg * @param length 显示时间 */ protected void showToast(String msg, int length) { UIHelper.showToast(activity, toast, msg); } @Override public void onDestroyView() { super.onDestroyView(); contentView = null; container = null; inflater = null; } public Context getApplicationContext() { return context; } public void setContentView(int layoutResID) { setContentView((ViewGroup) inflater.inflate(layoutResID, container, false)); } public void setContentView(View view) { contentView = view; } public View getContentView() { return contentView; } public View findViewById(int id) { if (contentView != null) return contentView.findViewById(id); return null; } // http://stackoverflow.com/questions/15207305/getting-the-error-java-lang-illegalstateexception-activity-has-been-destroyed @Override public void onDetach() { super.onDetach(); try { Field childFragmentManager = Fragment.class.getDeclaredField("mChildFragmentManager"); childFragmentManager.setAccessible(true); childFragmentManager.set(this, null); } catch (NoSuchFieldException e) { throw new RuntimeException(e); } catch (IllegalAccessException e) { throw new RuntimeException(e); } } /** * Description: 请求完成统一处理方法,非强制.<br/><br/> * Author: Create by Yu.Yao on 2016/9/26.<br/><br/> */ public void onComplete() { } }