数据绑定导致NullPointerException

时间:2017-08-23 16:03:09

标签: android data-binding

我有两个DataBindingClasses,比如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

我应该如何创建一个允许我绑定到两个对象的超类,同时让我从这两个类中删除多余的代码?

1 个答案:

答案 0 :(得分:0)

您可以在超类中创建私有字段library(tidyverse) left_join(df1, table(vect1) %>% enframe(), by = c('ID' = 'name')) %>% mutate(value = replace_na(value, 1))

为该字段创建吸气剂

ViewDataBinding mBinding

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

在超类的onCreate()中,使用protected ViewDataBinding getViewDataBinding(){ return mBinding }进行实际绑定。

然后,在子类中创建DataBindingUtil.inflate(inflater, **getLayoutId()**, container, false)字段,并通过binding的getter为其分配值。 您唯一需要做的就是将其强制转换为特定的绑定类。 类似于:mBinding

相关问题