I wan add new fragment to Element-android
like this:
private fun updateSelectedFragment(displayMode: PageDisplayMode) {
val fragmentTag = "FRAGMENT_TAG_${displayMode.name}"
val fragmentToShow = childFragmentManager.findFragmentByTag(fragmentTag)
childFragmentManager.commitTransaction {
childFragmentManager.fragments
.filter { it != fragmentToShow }
.forEach {
detach(it)
}
if (fragmentToShow == null) {
val params = NewHomeMainListParams(displayMode)
if(displayMode.name == "NEWHOME"){
add(R.id.newHomeMainListContainer, NewHomeMainListFragment::class.java, params.toMvRxBundle(), fragmentTag)
}else {
// here
add(R.id.newHomeMainListContainer, SquareFragment::class.java, params.toMvRxBundle(), fragmentTag)
}
} else {
attach(fragmentToShow)
}
}
}
when I running the app, then crash.
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.bbai.android.chita.debug, PID: 7951
java.lang.RuntimeException: Failed to call observer method
at androidx.lifecycle.ClassesInfoCache$MethodReference.invokeCallback(ClassesInfoCache.java:226)
at androidx.lifecycle.ClassesInfoCache$CallbackInfo.invokeMethodsForEvent(ClassesInfoCache.java:194)
at androidx.lifecycle.ClassesInfoCache$CallbackInfo.invokeCallbacks(ClassesInfoCache.java:185)
at androidx.lifecycle.ReflectiveGenericLifecycleObserver.onStateChanged(ReflectiveGenericLifecycleObserver.java:37)
at androidx.lifecycle.LifecycleRegistry$ObserverWithState.dispatchEvent(LifecycleRegistry.java:354)
at androidx.lifecycle.LifecycleRegistry.forwardPass(LifecycleRegistry.java:265)
at androidx.lifecycle.LifecycleRegistry.sync(LifecycleRegistry.java:307)
at androidx.lifecycle.LifecycleRegistry.moveToState(LifecycleRegistry.java:148)
at androidx.lifecycle.LifecycleRegistry.handleLifecycleEvent(LifecycleRegistry.java:134)
at androidx.fragment.app.Fragment.performCreate(Fragment.java:2942)
at androidx.fragment.app.FragmentStateManager.create(FragmentStateManager.java:475)
at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:273)
at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:2177)
at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:2088)
at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1990)
at androidx.fragment.app.FragmentManager$5.run(FragmentManager.java:524)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:223)
at android.app.ActivityThread.main(ActivityThread.java:7656)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
Caused by: java.lang.IllegalStateException: Failed to create initial state!
at com.airbnb.mvrx.MvRxStateFactoryKt.createStateFromConstructor(MvRxStateFactory.kt:83)
at com.airbnb.mvrx.RealMvRxStateFactory.createInitialState(MvRxStateFactory.kt:28)
at com.airbnb.mvrx.MvRxFactoryKt.createViewModel(MvRxFactory.kt:45)
at com.airbnb.mvrx.MvRxFactoryKt.access$createViewModel(MvRxFactory.kt:1)
at com.airbnb.mvrx.MvRxFactory.create(MvRxFactory.kt:26)
at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:187)
at com.airbnb.mvrx.MvRxViewModelProvider.get(MvRxViewModelProvider.kt:63)
at com.airbnb.mvrx.MvRxViewModelProvider.get$default(MvRxViewModelProvider.kt:38)
at im.vector.app.features.newhome.square.SquareFragment$$special$$inlined$fragmentViewModel$1.invoke(MvRxExtensions.kt:27)
at im.vector.app.features.newhome.square.SquareFragment$$special$$inlined$fragmentViewModel$1.invoke(Unknown Source:0)
at com.airbnb.mvrx.lifecycleAwareLazy.getValue(lifecycleAwareLazy.kt:53)
at com.airbnb.mvrx.lifecycleAwareLazy$1.onStart(lifecycleAwareLazy.kt:31)
at java.lang.reflect.Method.invoke(Native Method)
at androidx.lifecycle.ClassesInfoCache$MethodReference.invokeCallback(ClassesInfoCache.java:216)
at androidx.lifecycle.ClassesInfoCache$CallbackInfo.invokeMethodsForEvent(ClassesInfoCache.java:194)聽
at androidx.lifecycle.ClassesInfoCache$CallbackInfo.invokeCallbacks(ClassesInfoCache.java:185)聽
at androidx.lifecycle.ReflectiveGenericLifecycleObserver.onStateChanged(ReflectiveGenericLifecycleObserver.java:37)聽
at androidx.lifecycle.LifecycleRegistry$ObserverWithState.dispatchEvent(LifecycleRegistry.java:354)聽
at androidx.lifecycle.LifecycleRegistry.forwardPass(LifecycleRegistry.java:265)聽
at androidx.lifecycle.LifecycleRegistry.sync(LifecycleRegistry.java:307)聽
at androidx.lifecycle.LifecycleRegistry.moveToState(LifecycleRegistry.java:148)聽
at androidx.lifecycle.LifecycleRegistry.handleLifecycleEvent(LifecycleRegistry.java:134)聽
at androidx.fragment.app.Fragment.performCreate(Fragment.java:2942)聽
at androidx.fragment.app.FragmentStateManager.create(FragmentStateManager.java:475)聽
at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:273)聽
at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:2177)聽
at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:2088)聽
at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1990)聽
at androidx.fragment.app.FragmentManager$5.run(FragmentManager.java:524)聽
at android.os.Handler.handleCallback(Handler.java:938)聽
at android.os.Handler.dispatchMessage(Handler.java:99)聽
at android.os.Looper.loop(Looper.java:223)聽
at android.app.ActivityThread.main(ActivityThread.java:7656)聽
at java.lang.reflect.Method.invoke(Native Method)聽
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)聽
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)聽
Caused by: java.lang.InstantiationException: java.lang.Class<im.vector.app.features.newhome.square.SquareViewState> has no zero argument constructor
at java.lang.Class.newInstance(Native Method)
at com.airbnb.mvrx.MvRxStateFactoryKt.createStateFromConstructor(MvRxStateFactory.kt:74)
at com.airbnb.mvrx.RealMvRxStateFactory.createInitialState(MvRxStateFactory.kt:28)聽
at com.airbnb.mvrx.MvRxFactoryKt.createViewModel(MvRxFactory.kt:45)聽
at com.airbnb.mvrx.MvRxFactoryKt.access$createViewModel(MvRxFactory.kt:1)聽
at com.airbnb.mvrx.MvRxFactory.create(MvRxFactory.kt:26)聽
at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:187)聽
at com.airbnb.mvrx.MvRxViewModelProvider.get(MvRxViewModelProvider.kt:63)聽
at com.airbnb.mvrx.MvRxViewModelProvider.get$default(MvRxViewModelProvider.kt:38)聽
at im.vector.app.features.newhome.square.SquareFragment$$special$$inlined$fragmentViewModel$1.invoke(MvRxExtensions.kt:27)聽
at im.vector.app.features.newhome.square.SquareFragment$$special$$inlined$fragmentViewModel$1.invoke(Unknown Source:0)聽
at com.airbnb.mvrx.lifecycleAwareLazy.getValue(lifecycleAwareLazy.kt:53)聽
at com.airbnb.mvrx.lifecycleAwareLazy$1.onStart(lifecycleAwareLazy.kt:31)聽
at java.lang.reflect.Method.invoke(Native Method)聽
at androidx.lifecycle.ClassesInfoCache$MethodReference.invokeCallback(ClassesInfoCache.java:216)聽
at androidx.lifecycle.ClassesInfoCache$CallbackInfo.invokeMethodsForEvent(ClassesInfoCache.java:194)聽
at androidx.lifecycle.ClassesInfoCache$CallbackInfo.invokeCallbacks(ClassesInfoCache.java:185)聽
at androidx.lifecycle.ReflectiveGenericLifecycleObserver.onStateChanged(ReflectiveGenericLifecycleObserver.java:37)聽
at androidx.lifecycle.LifecycleRegistry$ObserverWithState.dispatchEvent(LifecycleRegistry.java:354)聽
at androidx.lifecycle.LifecycleRegistry.forwardPass(LifecycleRegistry.java:265)聽
at androidx.lifecycle.LifecycleRegistry.sync(LifecycleRegistry.java:307)聽
at androidx.lifecycle.LifecycleRegistry.moveToState(LifecycleRegistry.java:148)聽
at androidx.lifecycle.LifecycleRegistry.handleLifecycleEvent(LifecycleRegistry.java:134)聽
at androidx.fragment.app.Fragment.performCreate(Fragment.java:2942)聽
at androidx.fragment.app.FragmentStateManager.create(FragmentStateManager.java:475)聽
at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:273)聽
at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:2177)聽
at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:2088)聽
at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1990)聽
at androidx.fragment.app.FragmentManager$5.run(FragmentManager.java:524)聽
at android.os.Handler.handleCallback(Handler.java:938)聽
at android.os.Handler.dispatchMessage(Handler.java:99)聽
at android.os.Looper.loop(Looper.java:223)聽
at android.app.ActivityThread.main(ActivityThread.java:7656)聽
at java.lang.reflect.Method.invoke(Native Method)聽
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)聽
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)聽
looks like the PEOPLE and the ROOMS use the some oen fragment now.
Ensure you have added your new Fragment to FragmentModule
Also about:
Caused by: java.lang.InstantiationException: java.lang.Class
has no zero argument constructor
SquareViewState should have default value for every fields.
@bmarty I have a wrong understanding of the overall page structure. Your design is better than I thought. Great work! Give me a donation link, I want to donate 10,000 USD :D:D
Most helpful comment
@bmarty I have a wrong understanding of the overall page structure. Your design is better than I thought. Great work! Give me a donation link, I want to donate 10,000 USD :D:D