如何修复Android中未附加到活动的问题



在我的应用程序中,我想将此库用于ImagePicker:https://github.com/SimformSolutionsPvtLtd/SSImagePicker

但添加这行后,private val imagePicker: ImagePicker = registerImagePicker(this)显示我强制关闭

我想将其用于Fragment和此Fragment信息ViewPager2
FragmentAdapter代码:

class FragmentsAdapter (fragmentManager: FragmentManager, lifecycle: Lifecycle) :
FragmentStateAdapter(fragmentManager, lifecycle) {
override fun getItemCount(): Int {
return 2
}
override fun createFragment(position: Int): Fragment {
when (position) {
0 -> return FragmentA()
}
return FragmentB()
}
}

碎片B代码:

class FragmentB : Fragment(), ImagePickerResultListener {
private val imagePicker: ImagePicker = registerImagePicker(this)
...
private fun openImagePicker() {
imagePicker
.title("Images")
.multipleSelection(false)
.showCountInToolBar(true)
.showFolder(true)
.cameraIcon(true)
.doneIcon(true)
.allowCropping(true)
.compressImage(true)
.maxImageSize(2.5f)
.extension(PickExtension.ALL)
imagePicker.open(PickerType.GALLERY)
}
}

错误消息:

java.lang.IllegalStateException: Fragment MandatoryInfoFragment{ccb6b52} (d0165abf-9555-41a8-a139-d84da8774350) not attached to an activity.
at androidx.fragment.app.Fragment.requireActivity(Fragment.java:995)
at com.app.imagepickerlibrary.ImagePicker$Companion.registerImagePicker(ImagePicker.kt:232)
at com.myapp.ui.login.pages.complete.mandatory.MandatoryInfoFragment.<init>(FragmentB.kt:51)
at com.myapp.ui.login.pages.complete.FragmentsAdapter.createFragment(FragmentsAdapter.kt:22)

我该怎么修?

原因是registerImagePicker正在调用requireActivity()以获取上下文。并且在初始化时requireActivity()将返回null,因为Fragment还没有附接到Activity。请参阅下面的代码。

fun Fragment.registerImagePicker(callback: ImagePickerResultListener): ImagePicker {
return ImagePicker(callback, requireActivity())
}

要解决此问题,您可以在片段附加到例如onViewCreated()内部之后,在片段的生命周期树中向下移动初始化。检查碎片生命周期。

class FragmentB : Fragment(), ImagePickerResultListener {
private lateinit var imagePicker: ImagePicker
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
imagePicker = registerImagePicker(this)
}
}

修复Android 中未附加到活动的问题

您没有正确传递上下文,这就是您出现错误的原因。

如果您想获得活动的上下文,请添加此行

private val imagePicker: ImagePicker = registerImagePicker(requireActivity)

如果您想获得片段的上下文,请添加此行

private val imagePicker: ImagePicker = registerImagePicker(requireContext)

最新更新