2016-08-05 4 views
2

私は狂った私のコードに問題があります。カスタムビューのフィールドは、インフレーション後にnullです - データバインド

私はFragmentDataBindingを使用しています。

@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); 

そして、私の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);} 

そして膨張が、これは同じCustomViewクラスで呼び出されonCreateViewで行われた後に、あまりにもDataBindingを使用したい:

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

問題がありますこの方法ではNullPointerExceptionが得られます。

私の意見では、CustomViewオブジェクトが既にインスタンス化されており、フィールドが設定されているため、これはできません。

そうでなければ、CustomViewからmBinding.datePopupにアクセスできませんでした。

私はこのことを理解する助けてください; P

感謝;)

答えて

2

これは、Android Studioの2.2リリースで修正されなければならないバグです。同じバグの場合、データ・バインディング・フレームワークは、外部ビュー(FragmentAppointmentBinding)をバインドするときに、コンストラクタの一部として膨張しているすでにバインドされたビューを適切に無視していません。

+0

ありがとうございました。 私は2.2プレビュー7を使用しています – Appyx

+0

私は2.2プレビュー7を使用していましたが、2.2 Beta-1を使用していました。まだ動作していません:( –

+0

これは同じバグではないかもしれません。問題を再現したり、Android.comでバグを報告したりするプロジェクトへのリンクを投稿できますか? –

関連する問題