网站建设入门 下载,wap网站多少钱,桂林网站艰涩,网络规划设计师通过率最低平时的Android开发中#xff0c;我们经常要在Fragment中去获取当前的Activity实例#xff0c;刚开始的时候可能使用使用Fragment提供的getActivity方法来获取#xff0c;但是这个方法可能返回null#xff0c;为了让程序可以正常运行#xff0c;项目中就出现大量下面这样的…平时的Android开发中我们经常要在Fragment中去获取当前的Activity实例刚开始的时候可能使用使用Fragment提供的getActivity方法来获取但是这个方法可能返回null为了让程序可以正常运行项目中就出现大量下面这样的代码
FragmentActivity activity getActivity();
if(activity null){return;
}
//use activity或
FragmentActivity activity getActivity();
if(activity ! null){//use activity
}这个代码是安全的但是多次编写就显得繁琐且可能出错因为我觉得再简单的事只要重复非常多遍出错的可能性就增加。
本文分场景分别介绍几种优化的方式。
Activity一定存在的场合
首先是比较简单的Activity一定存在的场合比如Fragment的onResume、onCreateDialog等方法中这里Activity不可能为空那么如果还要加if语句来检查Activity为空的情况就显得很多余。这种情况下我们就可以利用requireActivity方法这个方法的内部实现检查Activity不存在的时候会抛出异常如果返回一定不为空这样就不需要再对返回值做检查
FragmentActivity activity requireActivity();
//use activityActivity可能不存在的场合
Activity可能不存在的场合就分很多种比如Fragment中另起线程、Presenter对Fragment的调用、其他组件比如播放器的回调等等这种情况下一遍遍地去编写getActivity结果的检测是一件很无聊的事情但这个又是一件必要的事情因为如果不做就会导致程序崩溃。因此下面提出一种将这个过程简化的方法。
首先自己项目中应该有类似BaseFragment、BaseDialogFragment这样的基础Fragment我们要做的就是在这些类里添加一个optActivity方法实现如下
public OptionalFragmentActivity optActivity() {return Optional.ofNullable(getActivity());
}这样在各个Fragment子类中就可以直接使用optActivity来更加简洁地获取Activity实例
optActivity().ifPresent(activity - {//do something
});看上去和原来的代码量差不多但只要写一遍就能体会出来这种新的写法要素更少更不容易出错写起来也更快而且在有时候可以写得更简洁、更突出重点
button.setOnClickListener(v - optActivity().ifPresent(activity - {//do something
}));这里的重点在于按钮点击后的处理检查Activity是否存在没那么重要。