content: package io.github.anotherjack.avoidonresult;
  
  import android.app.Activity;
  import android.app.Fragment;
  import android.app.FragmentManager;
  import android.content.Intent;
  
  import io.reactivex.Observable;
  
  /**
   * Created by jack on 2017/12/27.
   */
  
  public class AvoidOnResult {
      private static final String TAG = "AvoidOnResult";
      private AvoidOnResultFragment mAvoidOnResultFragment;
  
      public AvoidOnResult(Activity activity) {
          mAvoidOnResultFragment = getAvoidOnResultFragment(activity);
      }
  
      public AvoidOnResult(Fragment fragment){
          this(fragment.getActivity());
      }
  
      private AvoidOnResultFragment getAvoidOnResultFragment(Activity activity) {
          AvoidOnResultFragment avoidOnResultFragment = findAvoidOnResultFragment(activity);
          if (avoidOnResultFragment == null) {
              avoidOnResultFragment = new AvoidOnResultFragment();
              FragmentManager fragmentManager = activity.getFragmentManager();
              fragmentManager
                      .beginTransaction()
                      .add(avoidOnResultFragment, TAG)
                      .commitAllowingStateLoss();
              fragmentManager.executePendingTransactions();
          }
          return avoidOnResultFragment;
      }
  
      private AvoidOnResultFragment findAvoidOnResultFragment(Activity activity) {
          return (AvoidOnResultFragment) activity.getFragmentManager().findFragmentByTag(TAG);
      }
  
      public Observable<ActivityResultInfo> startForResult(Intent intent) {
          return mAvoidOnResultFragment.startForResult(intent);
      }
  
      public Observable<ActivityResultInfo> startForResult(Class<?> clazz) {
          Intent intent = new Intent(mAvoidOnResultFragment.getActivity(), clazz);
          return startForResult(intent);
      }
  
      public void startForResult(Intent intent, Callback callback) {
          mAvoidOnResultFragment.startForResult(intent, callback);
      }
  
      public void startForResult(Class<?> clazz, Callback callback) {
          Intent intent = new Intent(mAvoidOnResultFragment.getActivity(), clazz);
          startForResult(intent, callback);
      }
  
      public interface Callback {
          void onActivityResult(int resultCode, Intent data);
      }
  }
  