android - requireActivity 和 onActivityCreated 有什么区别

标签 android android-fragments android-lifecycle

在我的代码中,我在 onCreateView() 之后加载图片很不方便因为我不确定该 Activity 是否可用。因为 Glide 需要一个 Activity 上下文,所以我把这段代码放到了 onActivityCreated() 中。 :

override fun onActivityCreated(savedInstanceState: Bundle?) {
    super.onActivityCreated(savedInstanceState)

    //Crash unexpected since onActivityCreated should always have activity available
    Glide.with(activity!!)
        .load(viewModel.moment!!.mediaPath)
        .into(binding.momentPhoto);
}
然而,在查看了 Github 上的一些最佳实践后,许多示例将照片加载到 onCreateView() 中。 .他们通过使用 requireActivity() 来做到这一点。方法:
override fun onCreateView(
    inflater: LayoutInflater, container: ViewGroup?,
    savedInstanceState: Bundle?
): View? {
    binding = DataBindingUtil.inflate(layoutInflater, R.layout.fragment_photo_editor, container, false)

    Glide.with(requireActivity())
          .load(viewModel.moment!!.mediaPath)
          .into(binding.momentPhoto);

    return binding.root
}
有谁知道在 onActivityCreated() 之后使用 Activity 引用有什么区别?并从 requireActivity() 获取 Activity 引用?

最佳答案

我们应该把这个答案分成两部分。

1.activity!!的区别和 requireActivity()

他们都调用 getActivity()如果Activity,它们都会抛出异常。一片空白。唯一的区别是返回异常的类型及其消息。当然,requireActivity()引发更明确的异常。

2.onActivityCreated()之间的“区别”和 onCreateView()

方法onActivityCreated()被调用 之后 onCreateView()当两个 ActivityFragment查看是 已经创建的。

方法onCreateView()被调用 之前 onActivityCreated()Fragment View 应该是 还是 创建的。

在您的场景中,您放置 Glide 的位置没有区别。用法。如果您的 Fragment 会有所不同保留其实例或在 ImageView 的情况下在 Activity 内.

顺便说一句,我会移动你的Glide onViewCreated() 中的用法自从 onActivityCreated()很快就会被弃用(https://developer.android.com/jetpack/androidx/releases/fragment#1.3.0-alpha02)。

关于android - requireActivity 和 onActivityCreated 有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61045573/

相关文章:

android - 在 Android 中绘制对象的纹理?

Android NDK - 从 dlsym() 仅加载主 DLL\SO 的符号

android - 抽屉导航中的 Google Play 图书使用什么字体?

android - 在 fragment 中,如何停止ZXing Scanner的摄像头?

android - Activity 中的后退按钮无需重新创建先前的 Activity (Android)

android - 使用 Singleton 设计模式正确打开/关闭数据库

java - 在 google drive sdk 示例中找不到 Android 记事本提供程序类错误

java - 在主 Activity 中覆盖 fragment 时输入无法按预期工作

android - 何时取消注册 LocalBroadcastManager 接收器?

android - 将敏感数据保存到 Bundle 中是一个问题吗?