How to use data-binding in Dialog?

前端 未结 8 1837
傲寒
傲寒 2021-01-30 12:29

I am having trouble in implementing databinding in a Dialog. Is it possible?

Below is my xml.



    

        
8条回答
  •  慢半拍i
    慢半拍i (楼主)
    2021-01-30 13:03

    You should not use DataBindingUtil for generated classes as said in Android Documentation

    You should use generated binding class's inflate & bind method (MyDialogBinding.inflate).

    public void showDialog(final Context context) {
        Dialog dialog = new Dialog(context);
        MyDialogBinding binding = MyDialogBinding.inflate(LayoutInflater.from(context));
        dialog.setContentView(binding.getRoot());
        dialog.show();
    }
    

    Can it be simpler? No!

    Binding Document says for DataBindingUtil class's inflate method.

    Use this version only if layoutId is unknown in advance. Otherwise, use the generated Binding's inflate method to ensure type-safe inflation. DataBindingUtil.inflate(LayoutInflater.from(getContext()),R.layout.my_info_dialog_layout, null, false);

    This is like finding binding generated class, when we have class already.

    Instead use this

    MyDialogBinding binding = MyDialogBinding.inflate(LayoutInflater.from(context));
    

    or if you want make another class.

    public class MyDialog extends Dialog {
        public MyDialog(@NonNull Context context) {
            super(context);
        }
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            MyDialogBinding binding = MyDialogBinding.inflate(LayoutInflater.from(getContext()));
            setContentView(binding.getRoot());
        }
    }
    

提交回复
热议问题