gpt4 book ai didi

java - Android 数据与库模块中的 标签绑定(bind)

转载 作者:行者123 更新时间:2023-12-02 08:31:24 32 4
gpt4 key购买 nike

在我的项目中,我有多个模块,假设模块应用程序和模块 A 充当模块应用程序的库。我使用数据绑定(bind)并通过添加来正常工作

dataBinding {
enabled = true
}

在每个模块的build.gradle中。

当我使用 <include> 时出现问题模块 A 布局中的标签。从 DataBindingUtil 调用 setContentView 时崩溃。

java.lang.NullPointerException: Attempt to invoke virtual method 'void com.package.name.databinding.ViewToolbarBinding.invalidateAll()' on a null object reference

但是它在模块应用程序中工作正常,我可以使用类似的方法访问 View 。

mBindingUtil.includedLayout.viewInTheIncludedLayout

这是我在模块 A 中的 Activity 布局:

<?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">

<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

<include layout="@layout/view_toolbar"
android:id="@+id/toolbar_layout"/>

</LinearLayout>

</layout>

这是我在模块 A 中的 view_toolbar.xml :

<?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">

<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
style="@style/ToolbarTheme"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@color/primary_blue"
android:theme="@style/AppTheme"
app:elevation="0dp" />

</layout>

这就是我在模块 A 中膨胀 Activity 的方式:

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mBinding = DataBindingUtil.setContentView(this, R.layout.activity_with_include);
}

感谢任何帮助。谢谢

最佳答案

您应该使用 DataBindingUtil.inflate 而不是 DataBindingUtil.setContentView 来膨胀使用数据绑定(bind)的 View :

   @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
mBinding = DataBindingUtil.inflate(inflater, R.layout.yourlayoutfile, container, false);
//viewmodel assigned in oncreate()
mBinding.setViewModel(yourViewModel);
return mBinding.getRoot();
}

如果你看docs ,您将看到 DataBindingUtil.setContentView 的方法显示:

Set the Activity's content view to the given layout and return the associated binding. The given layout resource must not be a merge layout.

我认为可以安全地假设这包括 include 标签。因此,如果您使用 DataBindingUtil.inflate ,您应该是安全的。您还应该注意,任何 UI 设置都应该在 onCreateView() 中完成,而不是在 onCreate() 中完成。

关于java - Android 数据与库模块中的 <include> 标签绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46187736/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com