Search code examples
androidkotlinviewmodelandroid-viewmodel

android fragment viewmodel initialization failed


I'm trying to implement data-binding in android with kotlin:

override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        mBinding = DataBindingUtil.inflate<ViewDataBinding>(
            inflater, R.layout.fragment_login, container, false
        ) as FragmentLoginBinding
        val view: View = mBinding.root
        mBinding.login?.invoke(viewModel)
        return view
    }

But it says lateinit property viewModel has not been initialized on runtime. How can I resolve this ?

  • Initializing in fragment will work
  • It will better if you guys provide me with viewmodel initialized from parent, parent is an activity

Solution

  • Here is the thing worked for me :

    mBinding = DataBindingUtil.inflate<ViewDataBinding>(
                inflater, R.layout.fragment_login, container, false
            ) as FragmentLoginBinding
            val view: View = mBinding.root
            viewModel = ViewModelProvider(requireActivity()).get(AuthViewModel::class.java)
            mBinding.login = viewModel
            return view
    

    In XML :

    <?xml version="1.0" encoding="utf-8"?>
    <layout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools">
    
        <data>
    
            <variable
                name="login"
                type="com........." />
        </data>
        ....