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通过XListView实现上拉加载下拉刷新功能

    Android通过XListView实现上拉加载下拉刷新功能

    这篇文章主要为大家详细介绍了Android通过XListView实现上拉加载下拉刷新功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-12-12
  • Android CameraX 打开摄像头预览功能

    Android CameraX 打开摄像头预览功能

    这篇文章主要介绍了Android CameraX 打开摄像头预览功能,模块gradle的一些配置,使用的Android SDK版本为31,启用了databinding,具体实例代码跟随小编一起看看吧
    2021-12-12
  • Flutter Zone异常处理方法及基本原理

    Flutter Zone异常处理方法及基本原理

    这篇文章主要为大家介绍了Flutter Zone异常处理方法及基本原理详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-01-01
  • Android清空编辑框内容功能的实现实例代码

    Android清空编辑框内容功能的实现实例代码

    本篇文章主要介绍了Android清空编辑框数据功能的实现实例代码,非常具有实用价值,需要的朋友可以参考下。
    2017-03-03
  • 解析Android开发优化之:软引用与弱引用的应用

    解析Android开发优化之:软引用与弱引用的应用

    Java从JDK1.2版本开始,就把对象的引用分为四种级别,从而使程序能更加灵活的控制对象的生命周期。这四种级别由高到低依次为:强引用、软引用、弱引用和虚引用,本篇文章重点介绍一下软引用和弱引用
    2013-05-05
  • Android实现光点模糊渐变的自旋转圆环特效

    Android实现光点模糊渐变的自旋转圆环特效

    这篇文章主要为大家详细介绍了Android实现光点模糊渐变的自旋转圆环特效,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-06-06
  • TabLayout实现ViewPager指示器的方法

    TabLayout实现ViewPager指示器的方法

    这篇文章主要为大家详细介绍了TabLayout实现ViewPager指示器,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-06-06
  • 如何在原有Android项目中快速集成React Native详解

    如何在原有Android项目中快速集成React Native详解

    创建一个React Native项目并写一个纯的 React Native 应用可以参考官方指南。下面这篇文章主要给大家介绍了关于如何在原有Android项目中快速集成React Native的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下。
    2017-12-12
  • 解析Android Jetpack简介

    解析Android Jetpack简介

    Jetpack是一套库、工具和指南的集合,帮助开发者更轻松地编写优质应用,这篇文章主要介绍了Android Jetpack简介,需要的朋友可以参考下
    2022-09-09
  • Android安装apk文件并适配Android 7.0详解

    Android安装apk文件并适配Android 7.0详解

    这篇文章主要介绍了Android安装apk文件并适配Android 7.0详解的相关资料,需要的朋友可以参考下
    2017-05-05

最新评论