bounty将在59分钟后到期。此问题的答案有资格获得+50声望奖励。Mohamed Jihed Jaouadi正在寻找一个答案从一个有信誉的来源。
我有一个对话框片段,它显示了一个图像,该图像的字节码被传递给构造函数。
当对话框出现时,我处于黑暗模式,并尝试将模式更改为亮一,然后我回到屏幕上,屏幕显示全白色,我得到以下错误:
Caused by: androidx.fragment.app.Fragment$InstantiationException: Unable to instantiate fragment *.*.*.PictureLoaderDialogFragment: could not find Fragment constructor
我示例化我的片段对话框如下:
class PictureLoaderDialogFragment(
private var bitmapByteArray: ByteArray?
) : DialogFragment(){
companion object {
@JvmStatic
fun newInstance(
bitmapByteArray: ByteArray? = null
) = PictureLoaderDialogFragment(bitmapByteArray)
}
}
你知道该怎么修吗
2条答案
按热度按时间np8igboo1#
此错误是由向片段的构造函数传递参数引起的。
这与片段的生命周期及其与活动的相互作用有关。Android中的Fragment被设计为可重用的,并且可以根据Activity的生命周期在不同的时间点创建和销毁。在创建片段时,Android系统会使用一个没有参数的空构造函数,在设备配置发生变化(本例中为设备主题发生变化)后,创建一个新的片段示例。
为了解决这个问题,有三种解决方案:
1.在
Bundle
中保存参数1.使用
FragmentFactory
1.使用
Dependency Injection
(DI)由于您在代码中使用了
newInstance
方法,下面的示例显示了如何使用它,遵循 * 第一种方式 * 并将参数保存在Bundle
中:您可以访问
PictureLoaderDialogFragment
中传递的参数:您可以显示
DialogFragment
:This article解释了如何使用
FragmentFactory
,方法如下 * 第二种解决方法 *Hilt
rqmkfv5c2#
该错误消息表明您的
PictureLoaderDialogFragment
的构造函数存在问题。您已经实现的newInstance
方法对于向DialogFragment
传递参数是正确的。但是,问题可能在于构造函数本身。要修复此问题,请确保
PictureLoaderDialogFragment
类具有不带参数的构造函数。代码可以是这样的:我刚刚从
PictureLoaderDialogFragment
类中删除了构造函数参数,并通过单独的setter方法为bitmapByteArray
赋值。newInstance
工厂方法负责创建片段的新示例并适当地设置参数值。请确保更新片段实现的其余部分,以正确访问
bitmapByteArray
变量。