Element-android: add new fragment.

Created on 2 Dec 2020  路  2Comments  路  Source: vector-im/element-android

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.

question

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

All 2 comments

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

Was this page helpful?
0 / 5 - 0 ratings

Related issues

Bubu picture Bubu  路  3Comments

2011 picture 2011  路  3Comments

532910 picture 532910  路  3Comments

Kekun picture Kekun  路  3Comments

mvgorcum picture mvgorcum  路  3Comments