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
.