我正在使用 Android Jetpack 导航组件开发单个 Activity 应用程序。在其中一个 fragment 上,我使用了内置的数据绑定(bind)工具。奇怪的是,即使它在前一周还可以工作,但它今天似乎无缘无故地完全坏了。
设置:
我用于绑定(bind)的 fragment 具有以下布局文件:
<?xml version="1.0" encoding="utf-8"?>
<layout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
</data>
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/example_layout_root"
tools:context=".example.ExampleFragment"
android:background="@color/main_1"
>
...
</ScrollView>
</layout>
我已经剥离了主要内容,但它表明我有一个
<layout>
元素作为根,定义了数据和 fragment 布局部分。fragment 代码如下:
class ExamleFragment : Fragment() {
private val viewModel: ExampleViewModel by sharedViewModel()
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
// Inflate the layout for this fragment
val binding : FragmentExampleBinding = DataBindingUtil.inflate(inflater, R.layout.fragment_example, container, false)
// This one also does not work
// val binding = FragmentExampleBinding.inflate(inflater, container, false)
binding.vm = viewModel
binding.lifecycleOwner = this
return binding.root
}
}
我使用 Koin 将 View 模型注入(inject)到 fragment 中。
当我尝试扩展布局(使用
DataBindingUtil
或生成的 FragmentExampleBinding
类)时,会导致以下异常:java.lang.IllegalStateException: FragmentExampleBin…flater, container, false) must not be null at com.example.fragments.ExampleFragment.onCreateView(ExampleFragment.kt:38) at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2698) at ...
而且堆栈直接进入操作系统领域,所以基本上它没有提供任何有用的信息。我无法弄清楚为什么结果为空。
我试过的:
inflater.inflate(...)
来扩展布局它工作得很好,但这样我就不能使用数据绑定(bind)。
不是绝对必要的,它仍然不起作用。
带绑定(bind)的工作版本),即使它以前可以工作,
它现在不起作用。
无济于事。
有没有人遇到过类似的事情?代码在周末真的“崩溃”了,因为我在前周五刚刚测试过它并且它工作正常。
编辑 :
好的,所以我设法解决了它。
我开始尝试使用数据绑定(bind)创建另一个 fragment ,以查看是否所有 fragment 都损坏了,或者只是那个特定的 fragment 。新的似乎可以正常工作,但奇怪的是,即使它们基本相同,旧的 splinter fragment 仍然无法工作。
所以我做了 Clean + Rebuild(我发誓这是我第一次尝试解决这个问题),它只是修复了它。
最佳答案
在我的多模块项目,这个问题的原因是存在某种包名冲突的事实。
如果您在没有明显原因的情况下收到此错误,请仔细检查 AndroidManifest.xml
启用数据绑定(bind)的模块的文件。
确保所有启用数据绑定(bind)的模块都使用 唯一的包名 为我解决了这个问题。
我花了几个小时来找到这个问题的根源,希望其他人阅读这个答案并且不会花那么多钱。
关于android - DataBindingUtil 将布局膨胀为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59826066/