我正在使用导航体系结构组件库,我的应用程序的起点是以下片段:
class MainFragment : BaseFragment() {
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return inflater.inflate(R.layout.fragment_main, container, false)
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
}
}
它从一个抽象类
BaseFragment
继承:abstract class BaseFragment : Fragment() {
}
当我运行我的应用程序时,我得到:
Unable to instantiate fragment io.example.MainFragment: calling Fragment constructor caused an exception
但是,如果
MainFragment
扩展了Fragment
而不是BaseFragment
,则不会发生这种情况。是什么原因?这与导航体系结构组件的工作方式有关吗? 最佳答案
我遇到了类似的问题,因为在 MyBaseFragment 中有val
protected abstract val gpsMsg: String
在片段附加到上下文之前,我在其他片段中以这种方式覆盖了该片段。
override val gpsMsg: String = getString(R.string.gps_not_enabled)
因此,潜在的错误是因为context为null,并且getString使用
getResources()
返回requireContext().getResources()
。并且在requireContext()
源代码中将引发错误。public final Context requireContext() {
Context context = getContext();
if (context == null) {
throw new IllegalStateException("Fragment " + this + " not attached to a context.");
}
return context;
}
因此抛出的错误导致片段无法实例化。因此,我建议覆盖时要谨慎处理上下文。
关于android - 调用Fragment构造函数导致异常。导航架构组件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54050648/