在我的代码中,我在 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()
当两个 Activity
和 Fragment
查看是 已经创建的。
方法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/