Zhuinden / fragmentviewbindingdelegate-kt

[ACTIVE] A delegate for making managing the ViewBinding variable in a Fragment simpler.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

IllegalStateException on onCreateView

Drjacky opened this issue · comments

class MyFragment : androidx.fragment.app.Fragment.Fragment {
...
    private val binding by viewBinding(MyFragmentBinding::bind) //LINE 53
...
    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
...
    return binding.root //LINE 74
}

Crash:

java.lang.IllegalStateException: Should not attempt to get bindings when the Fragment's view is null.
at com.example.FragmentViewBindingDelegate.getValue(FragmentViewBindingDelegate.kt:62)
at com.example.MyFragment.getBinding(MyFragment.kt:53)
at com.example.MyFragment.onCreateView(MyFragment.kt:74)
at androidx.fragment.app.Fragment.performCreateView(Fragment.java:3104)
at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:524)
at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:261)
at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1899)
at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1817)
at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1760)
at androidx.fragment.app.FragmentManager$5.run(FragmentManager.java:547)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6718)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)

You're supposed to be using onViewCreated, not onCreateView for this delegate to work, as is shown in the docs.

override fun onViewCreated(...) {
     super onViewCreated(...)
     val binding = binding
     ...

You're also missing the Fragment(R.layout.) parameter from the inherited Fragment constructor.

Yeah, I realized that; I forgot to close the issue. Thanks for the reply.

I don't have the possibility to use Fragment(R.layout.) with my current(legacy) code. So, I used the onCreate to inflate the view and returned the .root.