【问题标题】:Data Binding causes NullPointerException数据绑定导致 NullPointerException
【发布时间】:2017-08-23 16:03:08
【问题描述】:

我有两个 DataBindingClass,比如 Activity1BindingActivity2Binding。之所以如此,是因为不同的包中有两种不同的布局。但是,这两个活动的逻辑功能是相同的,所以我正在尝试创建一个超类。

超类

...
...
mBinding.setItem(item);
...
checkSolution(mBinding.getItem()); //many other methods that use mBinding.

活动 1(扩展超类)

...
Activity1Binding mBinding;
...

活动 2(扩展超类)

...
Activity2Binding mBinding;
...

我面临以下问题。

要在超类中使用mBinding,它应该具有对该对象的引用。由于所有DataBinding 对象都扩展ViewDataBinding,因此我尝试声明一个相同的对象并将其类型转换为子类中的特定对象。

超类

ViewDataBinding mBinding;
...

活动 1

mBinding = (Activity1Binding) DataBindingUtil.setContentView(this, R.layout.activity1);

问题:这将不允许我使用像 getItem() 这样特定于数据绑定的方法。我在两种绑定布局中都使用了相同的对象名称item

我应该如何创建一个超类,让我可以绑定到两个对象,同时让我从两个类中删除冗余代码?

【问题讨论】:

  • 这有什么更新吗?遇到同样的问题

标签: android data-binding


【解决方案1】:

您可以在超类中创建私有字段ViewDataBinding mBinding

为该字段创建 getter

protected ViewDataBinding getViewDataBinding(){ return mBinding }

另外,创建将为您提供布局资源 ID 的抽象方法,即 getLayoutId() 并在具有实际布局 ID 的子类中覆盖它。

在超类的 onCreate() 中,使用DataBindingUtil.inflate(inflater, **getLayoutId()**, container, false) 进行实际绑定。

之后,您在子类中创建binding 字段并通过mBinding 的getter 为其分配值。 您唯一需要做的就是将其转换为您的特定绑定类。 比如:binding = (Activity1Binding) getViewDataBinding()

【讨论】:

    猜你喜欢
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    • 2020-01-12
    • 1970-01-01
    • 2016-03-07
    • 2017-05-16
    • 1970-01-01
    • 2014-06-09
    相关资源
    最近更新 更多