Giter Site home page Giter Site logo

vitaviva / fragivity Goto Github PK

View Code? Open in Web Editor NEW
296.0 10.0 39.0 3.92 MB

Use Fragment like Activity

Home Page: https://juejin.cn/post/6918693610359619592

License: MIT License

Kotlin 87.99% Java 12.01%
fragment singleactivityapp jetpack-navigation fragmentnavigator kotlin-android

fragivity's People

Contributors

julystars avatar qdsfdhvh avatar vitaviva avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

fragivity's Issues

恢复fragment后 onResume调用不准确

重现场景
比如有ABC三个fragment 从A跳转到B再从B跳转到C 这时从开发者选项中开启不保留活动 退到后台 让Activity被回收 再次进入app Fragment 恢复后 从C返回B再次进入C后会调用A和C的onResume

java.lang.NoSuchMethodError: No virtual method setSavedStateProvider

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.guadou.kt_demo/com.guadou.kt_demo.demo.demo11_fragment_navigation.Demo11Activity}: java.lang.RuntimeException: An exception happened in constructor of class com.github.fragivity.MyViewModel
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3773)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3952)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:91)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:149)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:103)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2386)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:213)
at android.app.ActivityThread.main(ActivityThread.java:8169)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:513)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1101)
Caused by: java.lang.RuntimeException: An exception happened in constructor of class com.github.fragivity.MyViewModel
at androidx.lifecycle.SavedStateViewModelFactory.create(SavedStateViewModelFactory.java:126)
at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:185)
at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:150)
at com.github.fragivity.FragivityUtil.loadRoot(Ext.kt:97)
at com.guadou.kt_demo.demo.demo11_fragment_navigation.Demo11Activity.init(Demo11Activity.kt:32)
at com.guadou.lib_baselib.base.activity.AbsActivity.onCreate(AbsActivity.kt:108)
at android.app.Activity.performCreate(Activity.java:8086)
at android.app.Activity.performCreate(Activity.java:8074)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1313)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3746)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3952) 
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:91) 
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:149) 
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:103) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2386) 
at android.os.Handler.dispatchMessage(Handler.java:107) 
at android.os.Looper.loop(Looper.java:213) 
at android.app.ActivityThread.main(ActivityThread.java:8169) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:513) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1101) 
Caused by: java.lang.NoSuchMethodError: No virtual method setSavedStateProvider(Ljava/lang/String;Landroidx/savedstate/SavedStateRegistry$SavedStateProvider;)V in class Landroidx/lifecycle/SavedStateHandle; or its super classes (declaration of 'androidx.lifecycle.SavedStateHandle' appears in /data/app/com.guadou.kt_demo-eTQZfjBkcRgOq7DciVaGbg==/base.apk)
at com.github.fragivity.MyViewModel.(MyViewModel.kt:41)
at java.lang.reflect.Constructor.newInstance0(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
at androidx.lifecycle.SavedStateViewModelFactory.create(SavedStateViewModelFactory.java:116)
at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:185) 
at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:150) 
at com.github.fragivity.FragivityUtil.loadRoot(Ext.kt:97) 
at com.guadou.kt_demo.demo.demo11_fragment_navigation.Demo11Activity.init(Demo11Activity.kt:32) 
at com.guadou.lib_baselib.base.activity.AbsActivity.onCreate(AbsActivity.kt:108) 
at android.app.Activity.performCreate(Activity.java:8086) 
at android.app.Activity.performCreate(Activity.java:8074) 
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1313) 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3746) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3952) 
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:91) 
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:149) 
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:103) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2386) 
at android.os.Handler.dispatchMessage(Handler.java:107) 
at android.os.Looper.loop(Looper.java:213) 
at android.app.ActivityThread.main(ActivityThread.java:8169) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:513) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1101) 

升级到0.1.4 或者0.1.5就会报错 0.1.3可以正常使用

Originally posted by @liukai2530533 in #5 (comment)

关于设置全局动画的建议

目前界面的跳转和关闭动画需要在push前设置一次,代码重复度有点高了。能否在Application里面增加一个设置全局界面跳转的动画方法?

如何清空backstack再启动一个新fragment呢

遇到个问题,是如果我的任务栈已经叠加了两个fragment , 比如 A打开B, 此时回退可以看到A, 但如果此时想从B到C,那怎么清除在后台的A呢? 从B到C, popSelf 不能清除掉最下层的A,popTo C也不能清除A, 从B到C, pop 和push 连着调用 会导致fragment重影, 新开的C和A重叠在一起了。有什么办法可以清空任务栈后再启动一个新的fragment, 或者清空某个后退站底层的fragment后再压入一个。

想返回多个fragment用什么方法呢

有这么个需求,比如说微信登录需要绑定手机,首先到登录界面,然后获取信息之后到手机绑定页面,在这个手机绑定页面,我需要返回到微信登录之前的页面,用什么方法呢,因为之前微信登录之前的页面是首页

可以使用高版本的Fragment吗?

“高版本Fragment,当同时应用Transition和applySlideIn时动画失效(原因待调查),暂时降到1.3.0-alpha07”,这个问题修复了吗?

[Deep Links]handleDeepLink添加NavOptions

你好,又来打扰了。

使用Deep Links handleDeepLink跳转时,无法使用NavOptions里的启动模式等功能,
希望能添加这个功能,增强Deep Links,相当于简易版本的ARouter了 😄

[IllegalStateException] Fragment xxx not associated with a fragment manager.

0.2.9版本 fragment流程 A -> B , B ->C, C(popSelf) -> D, D(pop) 回到B, 再从B(pop) 回到A必现闪退
0.2.5版本没有这个问题,由于出现了issue #43 一样的crash,所以升级了版本

07-12 14:33:22.877  3072  3072 E AndroidRuntime: FATAL EXCEPTION: main
07-12 14:33:22.877  3072  3072 E AndroidRuntime: Process: cn.net.cloudthink.smartmirror, PID: 3072
07-12 14:33:22.877  3072  3072 E AndroidRuntime: java.lang.IllegalStateException: Fragment FamilyFragment{fc108d} (ce6e6caa-fe6c-4dae-a966-eabbe8954140) not associated with a fragment manager.
07-12 14:33:22.877  3072  3072 E AndroidRuntime:        at androidx.fragment.app.Fragment.getParentFragmentManager(Fragment.java:1040)
07-12 14:33:22.877  3072  3072 E AndroidRuntime:        at androidx.navigation.fragment.NavHostFragment.findNavController(NavHostFragment.java:109)
07-12 14:33:22.877  3072  3072 E AndroidRuntime:        at androidx.navigation.fragment.FragmentKt.findNavController(Fragment.kt:29)
07-12 14:33:22.877  3072  3072 E AndroidRuntime:        at com.github.fragivity.LifecycleKt.getNavigator(Lifecycle.kt:20)
07-12 14:33:22.877  3072  3072 E AndroidRuntime:        at cn.com.broadlink.smartscreen.common.base.BaseFragment$onResume$2.onClick(BaseFragment.kt:90)
07-12 14:33:22.877  3072  3072 E AndroidRuntime:        at cn.com.broadlink.library.base.ext.binding.ViewClickAdapterKt$clickWithTrigger$1.onClick(ViewClickAdapter.kt:94)
07-12 14:33:22.877  3072  3072 E AndroidRuntime:        at android.view.View.performClick(View.java:5637)
07-12 14:33:22.877  3072  3072 E AndroidRuntime:        at android.view.View$PerformClick.run(View.java:22445)
07-12 14:33:22.877  3072  3072 E AndroidRuntime:        at android.os.Handler.handleCallback(Handler.java:755)
07-12 14:33:22.877  3072  3072 E AndroidRuntime:        at android.os.Handler.dispatchMessage(Handler.java:95)
07-12 14:33:22.877  3072  3072 E AndroidRuntime:        at android.os.Looper.loop(Looper.java:154)
07-12 14:33:22.877  3072  3072 E AndroidRuntime:        at android.app.ActivityThread.main(ActivityThread.java:6121)
07-12 14:33:22.877  3072  3072 E AndroidRuntime:        at java.lang.reflect.Method.invoke(Native Method)
07-12 14:33:22.877  3072  3072 E AndroidRuntime:        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:905)
07-12 14:33:22.877  3072  3072 E AndroidRuntime:        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:795)

集成文档缺少调用proxyFragmentFactory的说明,另外这个Java的API建议统一封装到Fragivity类里

1. 缺少文档

override fun onCreate(savedInstanceState: Bundle?) {
        proxyFragmentFactory()

在Activity创建之前,有一个proxyFragmentFactory()操作需要执行,否则A->B的时候,A Fragment的onStop/onPause的生命周期不会走,这部分文档上没有写。

1. 建议统一封装到Fragivity类里

现在在ReportHelper上,找了半天,看能否统一封装到Fragivity里面,并且补充文档。

关于单Activity,从loadRoot中跳转其他页面时设置属性popSelf = true的问题

作者您好,当项目中只有一个Activity,初始化加载loadRoot为登录页LoginFragment,当我登录后要跳转HomeFragment时使用方法navigator.push(HomeFragment::class) {
popSelf = true
applySlideInOut()
}
需要把原来的LoginFragment弹出并跳转到HomeFragment,需求是此时栈内只有HomeFragment即可
但是当我像上面那样做的时候跳转报错:java.lang.NullPointerException: Attempt to invoke virtual method 'int java.util.ArrayList.size()' on a null object reference 并异常退出应用。定位源码在FragivityFragmentNavigator -> navigate方法 ->代码片段:
else if (isSingleTopReplacement || isPopSelf) {
if (prevFragment != null) {
ft.remove(prevFragment)
fragment.mTag = generateBackStackName(backStack.size - 1, destId)
val size = fragmentManager.mBackStack.size
if (size > 0) {
fragmentManager.mBackStack[size - 1].mOps
.filter { it.mCmd == OP_ADD && it.mFragment == prevFragment }
.forEach { it.mFragment = fragment }
}
}
isAdded = false
}
里的 fragmentManager.mBackStack为空,在获取size前我加上fragmentManager.mBackStack!=null判断没报错了,这算Bug吗?
或者源码里有解决方案一开始就能弹出loadRoot初始化页面并跳转其他页面的正确解决方案吗?

不保留活动恢复后导航图不存在导致奔溃问题

Process: com.github.fragivity.example, PID: 20061
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.github.fragivity.example/com.github.fragivity.example.MainActivity}: java.lang.IllegalStateException: Restoring the Navigation back stack failed: destination 209186738 cannot be found from the current destination Destination(0xe9ab6b5) label=com.github.fragivity.example.HomeFragment class=com.github.fragivity.example.HomeFragment
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2985)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3120)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1840)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:207)
at android.app.ActivityThread.main(ActivityThread.java:6878)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:876)
Caused by: java.lang.IllegalStateException: Restoring the Navigation back stack failed: destination 209186738 cannot be found from the current destination Destination(0xe9ab6b5) label=com.github.fragivity.example.HomeFragment class=com.github.fragivity.example.HomeFragment
at androidx.navigation.NavController.onGraphCreated(NavController.java:619)
at androidx.navigation.NavController.setGraph(NavController.java:592)
at androidx.navigation.NavController.setGraph(NavController.java:572)
at com.github.fragivity.FragivityUtil__ActionLoadRootKt.loadRootInternal$FragivityUtil__ActionLoadRootKt(ActionLoadRoot.kt:84)
at com.github.fragivity.FragivityUtil__ActionLoadRootKt.loadRoot(ActionLoadRoot.kt:49)
at com.github.fragivity.FragivityUtil.loadRoot(Unknown Source:1)
at com.github.fragivity.FragivityUtil__ActionLoadRootKt.loadRoot(ActionLoadRoot.kt:45)
at com.github.fragivity.FragivityUtil.loadRoot(Unknown Source:1)
at com.github.fragivity.example.MainActivity.onCreate(MainActivity.kt:29)
at android.app.Activity.performCreate(Activity.java:7232)
at android.app.Activity.performCreate(Activity.java:7221)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1272)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2965)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3120) 
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78) 
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108) 
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1840) 
at android.os.Handler.dispatchMessage(Handler.java:106) 
at android.os.Looper.loop(Looper.java:207) 
at android.app.ActivityThread.main(ActivityThread.java:6878) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:876) 

关于pushWithPop的支持

1.关于pushWithPop字面意思,能实现开启二级页面并关闭一级页面吗? root的fragment能支持pushWithPop吗?
2.关于DeekLink的跳转 现在的逻辑是跳转到这个Fragment了 但是此Activity会默认加载它的root fragment ,这个root fragment可能不是我想要加载的。可以DeekLink跳转到的目的Fragment作为root吗?或者可选是否需要默认的root fragment

Add fragment 性能问题

使用add fragment 的方式添加fragment ,会存在一个问题,就是activity 在后台被系统回收,然后用户从任务管理器切换到这个activity时,回退栈里所有的fragment 都会执行onCreateView,会有比较严重的性能问题。

使用横竖屏切换demo,从日志上也可以得到验证
image

关于类似自定义抽屉式菜单或者底部菜单的多个顶层导航的功能无法实现

从Navigation过来的,项目迁移,遇到一个问题,关于自定义的抽屉菜单无法配合使用多顶层导航实现Fragment之间的管理
见:官方的抽屉式多顶层导航实现示例代码

起因是这样,因为项目使用了自定义布局的抽屉式写法类似(利用DrawerLayout实现自定义左右抽屉布局)

但是这样在放弃使用官方样式的同时也抛弃了NavigationView的使用和menu相关的配置
所以没办法通过Navigation去实现同时多个顶层导航,
然后看了下fragivity的示例代码,
发现在Activity中去通过loadRoot()方法设置好像也只可能有一个顶层导航,
所以希望大佬看看有没有实现的可能,
如果有的话,可以麻烦在代码中加上相关示例吗?
因为我认为这是一个强需求

采用 CallBack 构造Fragment的时候 切换动画无效

官方Demo中 CheckListFragment 中 加入切换页面的动画,发现无效果
private val _adapter by lazy {
CheckListAdapter { id, checked ->
navigator.push {
navOptions {
navOptions().applySlideInOut()
}
CheckItemFragment(id, checked, _cb)
}
}
}

关于Activity重建时异常闪退问题

版本: 0.2.9

复现Demo地址:https://github.com/Fomovet/MyApplication

问题描述:App运行后去修改xml界面中的文字,再使用Android Studio的Apply Changes Restart Activity重建预览时会出现异常闪退

2021-08-06 00:43:38.225 26009-26009/com.example.myapplication E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.myapplication, PID: 26009
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.myapplication/com.example.myapplication.MainActivity}: java.lang.IllegalStateException: Restoring the Navigation back stack failed: destination 112561190 cannot be found from the current destination NavGraph(0x0) startDestination={Destination(0x38d121c) label=com.example.myapplication.HomeFragment class=com.example.myapplication.HomeFragment}
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3318)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3429)
        at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:5481)
        at android.app.ActivityThread.-wrap19(Unknown Source:0)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2015)
        at android.os.Handler.dispatchMessage(Handler.java:109)
        at android.os.Looper.loop(Looper.java:166)
        at android.app.ActivityThread.main(ActivityThread.java:7555)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:469)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:963)
     Caused by: java.lang.IllegalStateException: Restoring the Navigation back stack failed: destination 112561190 cannot be found from the current destination NavGraph(0x0) startDestination={Destination(0x38d121c) label=com.example.myapplication.HomeFragment class=com.example.myapplication.HomeFragment}
        at androidx.navigation.NavController.onGraphCreated(NavController.java:619)
        at androidx.navigation.NavController.setGraph(NavController.java:592)
        at androidx.navigation.NavController.setGraph(NavController.java:572)
        at com.github.fragivity.FragivityUtil__ActionLoadRootKt.loadRootInternal$FragivityUtil__ActionLoadRootKt(ActionLoadRoot.kt:89)
        at com.github.fragivity.FragivityUtil__ActionLoadRootKt.loadRoot(ActionLoadRoot.kt:53)
        at com.github.fragivity.FragivityUtil.loadRoot(Unknown Source:1)
        at com.github.fragivity.FragivityUtil__ActionLoadRootKt.loadRoot(ActionLoadRoot.kt:48)
        at com.github.fragivity.FragivityUtil.loadRoot(Unknown Source:1)
        at com.github.fragivity.Fragivity.loadRoot(Fragivity.kt:17)
        at com.example.myapplication.MainActivity.onCreate(MainActivity.java:20)
        at android.app.Activity.performCreate(Activity.java:7343)
        at android.app.Activity.performCreate(Activity.java:7333)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1219)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3271)

关于方案的一些疑问

1、请问这样做有什么优势吗?
性能上?开发效率上?
2、插件化的支持?
3、旧项目迁移成本是否很大?

调整显示大小,发生闪退

你好,又来打扰了!
打开App后,放在后台,进设置调整显示大小后,再切回App,发生闪退,
我的demo会有这个问题,
链接 demo下载地址

还是上次那个demo,麻烦看下,谢谢!

08-05 21:56:13.014 22162 22162 E AndroidRuntime: FATAL EXCEPTION: main
08-05 21:56:13.014 22162 22162 E AndroidRuntime: Process: cn.net.cloudthink.smartmirror, PID: 22162
08-05 21:56:13.014 22162 22162 E AndroidRuntime: java.lang.RuntimeException: Unable to start activity ComponentInfo{cn.net.cloudthink.smartmirror/cn.net.cloudthink.smartmirror.app.HasLauncherActivity}: java.lang.IllegalStateException: Restoring the Navigation back stack failed: destination 232410147 cannot be found from the current destination NavGraph(0x0) startDestination={Destination(0x31b934c) label=cn.net.cloudthink.smartmirror.app.fragment.MainFragment class=cn.net.cloudthink.smartmirror.app.fragment.MainFragment}
08-05 21:56:13.014 22162 22162 E AndroidRuntime:        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3540)
08-05 21:56:13.014 22162 22162 E AndroidRuntime:        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3700)
08-05 21:56:13.014 22162 22162 E AndroidRuntime:        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)
08-05 21:56:13.014 22162 22162 E AndroidRuntime:        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
08-05 21:56:13.014 22162 22162 E AndroidRuntime:        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
08-05 21:56:13.014 22162 22162 E AndroidRuntime:        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2136)
08-05 21:56:13.014 22162 22162 E AndroidRuntime:        at android.os.Handler.dispatchMessage(Handler.java:106)
08-05 21:56:13.014 22162 22162 E AndroidRuntime:        at android.os.Looper.loop(Looper.java:236)
08-05 21:56:13.014 22162 22162 E AndroidRuntime:        at android.app.ActivityThread.main(ActivityThread.java:8061)
08-05 21:56:13.014 22162 22162 E AndroidRuntime:        at java.lang.reflect.Method.invoke(Native Method)
08-05 21:56:13.014 22162 22162 E AndroidRuntime:        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:656)
08-05 21:56:13.014 22162 22162 E AndroidRuntime:        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:967)
08-05 21:56:13.014 22162 22162 E AndroidRuntime: Caused by: java.lang.IllegalStateException: Restoring the Navigation back stack failed: destination 232410147 cannot be found from the current destination NavGraph(0x0) startDestination={Destination(0x31b934c) label=cn.net.cloudthink.smartmirror.app.fragment.MainFragment class=cn.net.cloudthink.smartmirror.app.fragment.MainFragment}
08-05 21:56:13.014 22162 22162 E AndroidRuntime:        at androidx.navigation.NavController.onGraphCreated(NavController.java:619)
08-05 21:56:13.014 22162 22162 E AndroidRuntime:        at androidx.navigation.NavController.setGraph(NavController.java:592)
08-05 21:56:13.014 22162 22162 E AndroidRuntime:        at androidx.navigation.NavController.setGraph(NavController.java:572)
08-05 21:56:13.014 22162 22162 E AndroidRuntime:        at com.github.fragivity.FragivityUtil__ActionLoadRootKt.loadRootInternal$FragivityUtil__ActionLoadRootKt(ActionLoadRoot.kt:89)
08-05 21:56:13.014 22162 22162 E AndroidRuntime:        at com.github.fragivity.FragivityUtil__ActionLoadRootKt.loadRoot(ActionLoadRoot.kt:53)
08-05 21:56:13.014 22162 22162 E AndroidRuntime:        at com.github.fragivity.FragivityUtil.loadRoot(Unknown Source:1)
08-05 21:56:13.014 22162 22162 E AndroidRuntime:        at com.github.fragivity.FragivityUtil__ActionLoadRootKt.loadRoot(ActionLoadRoot.kt:48)
08-05 21:56:13.014 22162 22162 E AndroidRuntime:        at com.github.fragivity.FragivityUtil.loadRoot(Unknown Source:1)
08-05 21:56:13.014 22162 22162 E AndroidRuntime:        at cn.net.cloudthink.smartmirror.app.HasLauncherActivity.initView(HasLauncherActivity.kt:34)
08-05 21:56:13.014 22162 22162 E AndroidRuntime:        at cn.com.broadlink.library.base.app.activity.BaseVmActivity.init(BaseVmActivity.kt:45)
08-05 21:56:13.014 22162 22162 E AndroidRuntime:        at cn.com.broadlink.library.base.app.activity.BaseVmActivity.onCreate(BaseVmActivity.kt:39)
08-05 21:56:13.014 22162 22162 E AndroidRuntime:        at cn.com.broadlink.library.base.app.activity.BaseVmDbActivity.onCreate(BaseVmDbActivity.kt:20)
08-05 21:56:13.014 22162 22162 E AndroidRuntime:        at cn.net.cloudthink.smartmirror.app.HasLauncherActivity.onCreate(HasLauncherActivity.kt:25)
08-05 21:56:13.014 22162 22162 E AndroidRuntime:        at android.app.Activity.performCreate(Activity.java:8127)
08-05 21:56:13.014 22162 22162 E AndroidRuntime:        at android.app.Activity.performCreate(Activity.java:8098)
08-05 21:56:13.014 22162 22162 E AndroidRuntime:        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1310)
08-05 21:56:13.014 22162 22162 E AndroidRuntime:        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3513)
08-05 21:56:13.014 22162 22162 E AndroidRuntime:        ... 11 more

没有Activity下的push

使用场景比如:带底部导航的模式,下面四个button切换上面的fragment,目前我找了一圈,只看到Ext.kt中有:

val Fragment.navigator
val View.navigator

应该再来一个Activity.navigator

0.2.4构造方法传参的问题

之前的版本没问题 升级到0.2.4版本之后我发现通过构造方法传参会被保存下来 比如点击News列表进入详情 点击第一条News进入NewsDetail ,然后我退出页面 再点第二条News 但是获取到的id还是第一条的id 。
我之前是可以通过构造传参的 现在是不支持了吗?如果要改动那工程量好大

popSelf时的动画不顺畅

popSelf的动画不顺畅 能不能设置为启动新页面之后,当前页面默默关闭,而不是先关闭再开启 ,这样动画感觉有点奇怪

最低版本兼容问题

1.能否调整最低版本兼容。该库的最低版本为5.0 应该是为了sharedElements的过渡动画 只能在5.0以上使用,那么能不能支持4.0或4.4版本呢? 写了sharedElements 但是低于5.0版本的 不使用动画 这样可以吗? 我们的项最低版本是4.4的.

2.popSelf的动画不顺畅 能不能设置为启动新页面之后,当前页面默默关闭,而不是先关闭再开启 ,这样动画感觉有点奇怪

一些想法

fragment生命周期这块处理很棒!

原生的navigator replace不好,改成add Fragment 也不太方便,
有的界面跳转需要add方式,有的界面需要replace方式,
root Fragment也会发生变化(例如账号登录前后,root Fragment 就变了)

关于popSelf跳转界面和替换根布局的问题

1、使用popSelf跳转界面后使用手机物理键还能返回上一级
Fragivity.of(this).pushTo(LoginFragment.class, new NavOptionsBuilder().popSelf(true).build());

2、如何替换根布局?比如说A界面是根布局,从A界面跳转到B界面,此时B界面操作退出登录,那么跳转到登录界面C,这时候如何清掉A界面和B界面并且把C界面设为根布局?因为退出登录后就不能再返回主界面了此时栈列应该只有C界面一个Fragment

0.3.1 版本 navigator.push 携带参数并设置 popSelf = true 会闪退

java.lang.NoSuchFieldError: No field mBackStack of type Ljava/util/Deque; in class Landroidx/navigation/NavController; or its superclasses (declaration of 'androidx.navigation.NavController' appears in /data/app/com.whitewolfx.tools-2/base.apk:classes21.dex)
        at androidx.navigation.ExtKt.removeLastBackStackEntry(Ext.kt:20)
        at com.github.fragivity.FragivityUtil__ActionPushKt.pushInternal$FragivityUtil__ActionPushKt(ActionPush.kt:80)
        at com.github.fragivity.FragivityUtil__ActionPushKt.pushInternal$FragivityUtil__ActionPushKt$default(ActionPush.kt:63)
        at com.github.fragivity.FragivityUtil__ActionPushKt.push(ActionPush.kt:39)
        at com.github.fragivity.FragivityUtil.push(Unknown Source)
        at com.github.fragivity.FragivityUtil__ActionPushKt.push(ActionPush.kt:31)
        at com.github.fragivity.FragivityUtil.push(Unknown Source)

求问,怎么配合组件化使用

在现有项目上进行改造,使用的阿里路由
navigator.push {
ARouter.getInstance().build(“”).navigation() as Fragment
}
这样可以启动一个fragment 但是其他属性就无法设置了,求解

当升级为 navigation-fragment-ktx:2.4.0 和 androidx.navigation:navigation-ui-ktx:2.4.0 时跳转报错

大佬:
你好, 如标题所示,当升级到 2.4.0时跳转会报如下错误:
java.lang.NoSuchMethodError: No virtual method moveToState(Landroidx/fragment/app/Fragment;I)V in class Landroidx/fragment/app/FragmentManager; or its super classes (declaration of 'androidx.fragment.app.FragmentManager' appears in /data/app/com.xxx.xxx.xxx-J5OaT2ltiNeEvbQmx-JqVg==/base.apk)
at androidx.fragment.app.FragivityFragmentNavigator.init$lambda-0(FragivityFragmentNavigator.kt:40)
at androidx.fragment.app.FragivityFragmentNavigator.$r8$lambda$lP8qpNsgnLRTRz8pL1NGjhIp6Ww(Unknown Source:0)
at androidx.fragment.app.FragivityFragmentNavigator$$ExternalSyntheticLambda0.onBackStackChanged(Unknown Source:2)
at androidx.fragment.app.FragmentManager.reportBackStackChanged(FragmentManager.java:2030)
at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1865)
at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1764)
at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1701)
at androidx.fragment.app.FragmentManager$4.run(FragmentManager.java:488)
at android.os.Handler.handleCallback(Handler.java:900)
at android.os.Handler.dispatchMessage(Handler.java:103)
at android.os.Looper.loop(Looper.java:219)
at android.app.ActivityThread.main(ActivityThread.java:8668)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:513)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1109)

我的跳转代码如下:
navigator.push(JuniorGeometryStudyFragment::class){
applySlideInOut()
}

我测试了多次,错误信息只能如上, 请大佬看看具体是什么原因造成的. 我的QQ: 712952521
PS: 我使用 com.github.vitaviva.fragivity:core:0.3.1 , navigation-fragment2个库 2.3.5, 则表现是正常的

loadRoot时,在factory中给Fragment传入的argument参数无效

Hello,用最新的库试了下,发现这里factory给Fragment传入的argument参数会在ReportFragment里onAttach的时候被覆盖成这个bundle
Bundle[{real=com.github.fragivity.example.HomeFragment}]
相关代码:
`

override fun onAttach(context: Context) {

    super.onAttach(context)

    mChildFragmentManager.beginTransaction().apply {

        _realFragment.arguments = arguments

        add(R.id.container, _realFragment)

`

Originally posted by @caojing35 in #6 (comment)

demo 打开不保留活动,应用回后台,再进入前台应用崩溃

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.github.fragivity.example/com.github.fragivity.example.MainActivity}: java.lang.IllegalStateException: Restoring the Navigation back stack failed: destination 177236320 cannot be found from the current destination Destination(0x926c814) label=home class=com.github.fragivity.example.HomeFragment
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3308)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3457)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2044)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:224)
at android.app.ActivityThread.main(ActivityThread.java:7562)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:539)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)
Caused by: java.lang.IllegalStateException: Restoring the Navigation back stack failed: destination 177236320 cannot be found from the current destination Destination(0x926c814) label=home class=com.github.fragivity.example.HomeFragment
at androidx.navigation.NavController.onGraphCreated(NavController.java:617)
at androidx.navigation.NavController.setGraph(NavController.java:590)
at androidx.navigation.NavController.setGraph(NavController.java:570)
at com.github.fragivity.NavHostUtil.loadRoot(NavHost.kt:111)
at com.github.fragivity.example.MainActivity.onCreate(MainActivity.kt:21)
at android.app.Activity.performCreate(Activity.java:7893)
at android.app.Activity.performCreate(Activity.java:7880)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1307)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3283)

配合hilt使用闪退

QQ截图20210302100246
这么调用的
navigator.push {
ARouter.getInstance().build(“xxxx”).navigation() as Fragment
}

关于 by navGraphViewModels

导航图是动态生成,那么by navGraphViewModels(R.id.xxxx)这个图内作用域共享的ViewModel是不是就没办法使用了?

关于PopTo的问题

情况1:单独的Activity 启动的都是无参数的 popto可以生效
情况2:另一个Acftivity 内部Fragment都是带参数的 popto没有反应

PopTo会有使用要求吗? 写法一样 有的能生效有的不生效,难道真是参数的问题?

侧滑返回和退场动画有重复

Fragment1:
navigator.push(Fragment2::class) {
enterAnim = R.anim.slide_in
exitAnim = R.anim.slide_out
popEnterAnim = R.anim.slide_in_pop
popExitAnim = R.anim.slide_out_pop
}

Fragment2:
swipeBackLayout.setEnableGesture(true)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.