我的代码有问题让我发疯。
我在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
对象已经实例化并且字段已设置。
如果不是,我无法访问CustomView
到mBinding.datePopup
。
请帮助我理解这一点; P
谢谢;)
答案 0 :(得分:2)
这是一个应该在Android Studio 2.2版本中修复的错误。如果它是同一个bug,那么数据绑定框架在绑定外部视图(FragmentAppointmentBinding)时,不会正确地忽略您作为构造函数的一部分而膨胀的已绑定视图。