我正在开发一个 android 应用程序,该应用程序记录仓库中生产材料的消耗量。我正在使用 Androids UI Navigation 架构组件来处理应用程序内的导航。在每个片段中,我都使用相同的 onCreateView 函数:
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
binding = DataBindingUtil.inflate(inflater, R.layout.fragment_layout, container, false)
return inflater.inflate(R.layout.fragment_layout, container, false)
}
其中 fragment_layout 是当前 Fragments 布局的资源 id。
我现在的问题是,在一个片段中,对 DataBindingUtil.inflate 的调用导致了 InvocationTargetException。
我已经注释掉了完整的布局,以检查布局文件中是否存在一些错误。之后,我注释掉了片段内视图的所有逻辑。这一遍又一遍地导致了同样的异常。
我做的最后一个测试是将 onCreateView 中的行代码从
binding = DataBindingUtil.inflate(inflater, R.layout.consumption_fragment, container, false)
return binding.root
至:
return inflater.inflate(R.layout.fragment_layout, container, false)
在那之后,所有的问题都没有了。但是这个解决方案不适合我,因为我需要使用数据绑定。
这是相关布局文件的数据部分
<data>
<import type="Field" />
<import type="androidx.lifecycle.LiveData" />
<import type="java.util.List" />
<variable
name="parcelNo"
type="Field<String>" />
<variable
name="piece"
type="Field<String>" />
<variable
name="parcels"
type="LiveData<List<Consumption>>" />
<variable
name="parcel"
type="LiveData<Parcel>" />
</data>
logcat 中显示的堆栈跟踪没有提供关于错误发生位置的太多信息。
java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)