39

What is correct way of using Android View Binding in DialogFragment()?

Official documentation mentions only Activity and Fragment: https://developer.android.com/topic/libraries/view-binding

1 Answer 1

58

Use inflate(LayoutInflater.from(context)) instead. And use binding.root to set the builder view.

Also, as Google suggests, it's best practice to set the binding instance to null at onDestroyView() when using fragments: https://developer.android.com/topic/libraries/view-binding#fragments

Example:

class ExampleDialog : DialogFragment() {

    private var _binding: DialogExampleBinding? = null
    // This property is only valid between onCreateDialog and
    // onDestroyView.
    private val binding get() = _binding!!

    override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
        _binding = DialogExampleBinding.inflate(LayoutInflater.from(context))
        return AlertDialog.Builder(requireActivity())
            .setView(binding.root)
            .create()
    }
    
    override fun onDestroyView() {
        super.onDestroyView()
        _binding = null
    } 
}
Sign up to request clarification or add additional context in comments.

8 Comments

This is recommended to prevent crashes but what happens if binding is used after it is set to null? I think it will crash, which means private val binding get() = _binding!! makes no sense at all. Am I missing something?
You shouldn't use the view once it reaches the onDestroyView life cycle.
Also, it is a better pratice to use your binding as a local variable. No need to override onDestroyView in this case ! :)
This will crash sometimes as @Mehmed said.
@IgorGanapolsky, yes. When a fragment recreates a view, it's _binding receives a new value. To detect where a view is destroyed, check _binding == null (for instance, after long loading operations).
|

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.