Android中两个类让你再也不用实现onActivityResult()

 更新时间:2018年08月06日 10:49:23   作者:天之界线2010  
这篇文章主要给大家介绍了关于Android中两个类让你再也不用实现onActivityResult()的相关资料,文中通过示例代码介绍的非常详细,对各位Android开发者们具有一定的参考学习价值,需要的朋友们下面来一起看看吧

前言

当我们知道fragment仅仅可以收到自己请求的回调后,我们就可以用它来解耦activity中onActivityResult的逻辑了。一般情况下,如果一个activity中多个回调结果的话,onActivityResult()中会有各种case判断,并且这种设计也打断了流式写法。那么我们索性建立一个无UI的fragment做精准的接收器,这样就可以再也不写onActivityResult()了。

Fragment:

/**
 * @author Kale
 * @date 2018/4/13
 */
public class OnActResultEventDispatcherFragment extends Fragment {

 public static final String TAG = "on_act_result_event_dispatcher";

 private SparseArray<ActResultRequest.Callback> mCallbacks = new SparseArray<>();

 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setRetainInstance(true);
 }

 public void startForResult(Intent intent, ActResultRequest.Callback callback) {
  mCallbacks.put(callback.hashCode(), callback);
  startActivityForResult(intent, callback.hashCode());
 }

 @Override
 public void onActivityResult(int requestCode, int resultCode, Intent data) {
  super.onActivityResult(requestCode, resultCode, data);

  ActResultRequest.Callback callback = mCallbacks.get(requestCode);
  mCallbacks.remove(requestCode);

  if (callback != null) {
   callback.onActivityResult(resultCode, data);
  }
 }
}

请求封装类:

public class ActResultRequest {

 private OnActResultEventDispatcherFragment fragment;

 public ActResultRequest(Activity activity) {
  fragment = getEventDispatchFragment(activity);
 }

 private OnActResultEventDispatcherFragment getEventDispatchFragment(Activity activity) {
  final FragmentManager fragmentManager = activity.getFragmentManager();

  OnActResultEventDispatcherFragment fragment = findEventDispatchFragment(fragmentManager);
  if (fragment == null) {
   fragment = new OnActResultEventDispatcherFragment();
   fragmentManager
     .beginTransaction()
     .add(fragment, OnActResultEventDispatcherFragment.TAG)
     .commitAllowingStateLoss();
   fragmentManager.executePendingTransactions();
  }
  return fragment;
 }

 private OnActResultEventDispatcherFragment findEventDispatchFragment(FragmentManager manager) {
  return (OnActResultEventDispatcherFragment) manager.findFragmentByTag(OnActResultEventDispatcherFragment.TAG);
 }

 public void startForResult(Intent intent, Callback callback) {
  fragment.startForResult(intent, callback);
 }

 public interface Callback {

  void onActivityResult(int resultCode, Intent data);
 }
}

发送请求和监听请求的代码:

Intent intent = new Intent(this, SecondActivity.class);

request.startForResult(intent, new ActResultRequest.Callback() {
 @Override
 public void onActivityResult(int resultCode, Intent data) {
  Toast.makeText(MainActivity.this, "" + resultCode, Toast.LENGTH_SHORT).show();
 }
});

题外话:

最新的support包已经解决了fragment嵌套时里层的fragment收不到结果的问题,请及时更新依赖。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

相关文章

  • Android实现图片文字轮播特效

    Android实现图片文字轮播特效

    这篇文章主要介绍了Android图片文字轮播效果,分别实现图片和文字自动滚动,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-01-01
  • Android项目开发之UI设计器

    Android项目开发之UI设计器

    这篇文章主要为大家详细介绍了Android项目开发之UI设计器,具有一定的实用性和参考价值,感兴趣的小伙伴们可以参考一下
    2016-06-06
  • Android PowerManagerService 打开省电模式

    Android PowerManagerService 打开省电模式

    这篇文章主要介绍了Android PowerManagerService打开省电模式,文章通告省电模式的打开过程、什么是 battery saver sticky 模式两部分展开详情,感兴趣的朋友可以参考一下
    2022-08-08
  • Android实现计时与倒计时的方法汇总

    Android实现计时与倒计时的方法汇总

    这篇文章主要介绍了Android实现计时与倒计时的方法汇总,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-06-06
  • 详解Android App中创建ViewPager组件的方法

    详解Android App中创建ViewPager组件的方法

    这篇文章主要介绍了详解Android App中创建ViewPager组件的方法,ViewPager最基本的功能就是可以使视图滑动,需要的朋友可以参考下
    2016-03-03
  • android自定义控件实现简易时间轴(1)

    android自定义控件实现简易时间轴(1)

    这篇文章主要为大家详细介绍了android自定义控件实现简易时间轴,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • Android下2d物理引擎Box2d用法简单实例

    Android下2d物理引擎Box2d用法简单实例

    这篇文章主要介绍了Android下2d物理引擎Box2d用法,实例分析了在Android平台上使用Box2d的基本技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • 使用Kotlin开发Android应用的初体验

    使用Kotlin开发Android应用的初体验

    本篇文章主要介绍了使用Kotlin开发Android应用的初体验,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • Android使用Intent实现页面跳转

    Android使用Intent实现页面跳转

    这篇文章主要为大家详细介绍了Android使用Intent实现页面跳转,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-10-10
  • flutter中的布局和响应式app方法示例

    flutter中的布局和响应式app方法示例

    这篇文章主要为大家介绍了flutter中的布局和响应式app方法示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12

最新评论