在膨胀 - 数据绑定后,自定义视图的字段为空

时间:2016-08-05 01:08:45

标签: android data-binding nullpointerexception

我的代码有问题让我发疯。

我在DataBinding中使用Fragment

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

    mBinding = DataBindingUtil.inflate(inflater, R.layout.fragment_appointment, container, false);
    mViewModel = new AppointmentViewModel(((DetailActivity) getActivity()).getSalonId());
    mBinding.setViewModel(mViewModel);
    mBinding.datePopup.setViewModel(mViewModel);

并希望在DataBinding

中使用CustomView
public class DatePopupView extends FrameLayout {
private Date mPickedDate = null;
private CustomDatePopupViewBinding mBinding = null;

public DatePopupView(Context context) {
    super(context);
    setup();
}

public DatePopupView(Context context, AttributeSet attrs) {
    super(context, attrs);
    setup();
}

public void setup() {
    mPickedDate = new Date();
    LayoutInflater inflater = LayoutInflater.from(getContext());
    mBinding = CustomDatePopupViewBinding.inflate(inflater, this, true);}

onCreateView中完成充气后,会在同一个CustomView类中调用它:

public void setViewModel(AppointmentViewModel viewModel) {
    mBinding.setViewModel(viewModel);
}

问题是我在这个方法中得到NullPointerException

在我看来,这是不可能的,因为CustomView对象已经实例化并且字段已设置。

如果不是,我无法访问CustomViewmBinding.datePopup

请帮助我理解这一点; P

谢谢;)

1 个答案:

答案 0 :(得分:2)

这是一个应该在Android Studio 2.2版本中修复的错误。如果它是同一个bug,那么数据绑定框架在绑定外部视图(FragmentAppointmentBinding)时,不会正确地忽略您作为构造函数的一部分而膨胀的已绑定视图。