HelloCW
HelloCW

Reputation: 2295

Where should I place viewDataBinding.lifecycleOwner = this.viewLifecycleOwner with Data Binding and Lifecycle?

The following code is from the project architecture-samples, you can see it here.

I'm not sure where I should place viewDataBinding.lifecycleOwner = this.viewLifecycleOwner between onCreateView() and onActivityCreated(), could you tell me?

class TasksFragment : Fragment() {

    private lateinit var viewDataBinding: TasksFragBinding  

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        viewDataBinding = TasksFragBinding.inflate(inflater, container, false).apply {
            viewmodel = viewModel
        }
        setHasOptionsMenu(true)

        //viewDataBinding.lifecycleOwner = this.viewLifecycleOwner    Can I place here?
        return viewDataBinding.root
    }


    override fun onActivityCreated(savedInstanceState: Bundle?) {
        super.onActivityCreated(savedInstanceState)
        // Set the lifecycle owner to the lifecycle of the view
        viewDataBinding.lifecycleOwner = this.viewLifecycleOwner    
    }

   ..
}

Upvotes: 1

Views: 1898

Answers (1)

EpicPandaForce
EpicPandaForce

Reputation: 81568

onActivityCreated is deprecated. You should use onViewCreated or onCreateView.

private var binding: TasksFragBinding? = null

override fun onCreate(savedInstanceState: Bundle?) {
    setHasOptionsMenu(true)
}

override fun onCreateView(
    inflater: LayoutInflater,
    container: ViewGroup?,
    savedInstanceState: Bundle?
): View? {
    val viewDataBinding = TasksFragBinding.inflate(inflater, container, false).apply {
        viewmodel = viewModel
        lifecycleOwner = viewLifecycleOwner
    }
    this.binding = viewDataBinding 

    return viewDataBinding.root
}

override fun onDestroyView() {
    super.onDestroyView()
    binding = null
}

Upvotes: 2

Related Questions