vitaviva / fragivity Goto Github PK
View Code? Open in Web Editor NEWUse Fragment like Activity
Home Page: https://juejin.cn/post/6918693610359619592
License: MIT License
Use Fragment like Activity
Home Page: https://juejin.cn/post/6918693610359619592
License: MIT License
重现场景
比如有ABC三个fragment 从A跳转到B再从B跳转到C 这时从开发者选项中开启不保留活动 退到后台 让Activity被回收 再次进入app Fragment 恢复后 从C返回B再次进入C后会调用A和C的onResume
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里面增加一个设置全局界面跳转的动画方法?
遇到个问题,是如果我的任务栈已经叠加了两个fragment , 比如 A打开B, 此时回退可以看到A, 但如果此时想从B到C,那怎么清除在后台的A呢? 从B到C, popSelf 不能清除掉最下层的A,popTo C也不能清除A, 从B到C, pop 和push 连着调用 会导致fragment重影, 新开的C和A重叠在一起了。有什么办法可以清空任务栈后再启动一个新的fragment, 或者清空某个后退站底层的fragment后再压入一个。
有这么个需求,比如说微信登录需要绑定手机,首先到登录界面,然后获取信息之后到手机绑定页面,在这个手机绑定页面,我需要返回到微信登录之前的页面,用什么方法呢,因为之前微信登录之前的页面是首页
使用demo app SplashFragment中将push popself 改成 pushTo方式进入HomeFragment,然后随便进哪个fragment,再后退,HomeFragment没有走onResume
“高版本Fragment,当同时应用Transition和applySlideIn时动画失效(原因待调查),暂时降到1.3.0-alpha07”,这个问题修复了吗?
你好,又来打扰了。
使用Deep Links handleDeepLink跳转时,无法使用NavOptions里的启动模式等功能,
希望能添加这个功能,增强Deep Links,相当于简易版本的ARouter了 😄
0.2.1 popself之后启动新的Fragment,navController的回退栈没更新还是显示旧的
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)
override fun onCreate(savedInstanceState: Bundle?) {
proxyFragmentFactory()
在Activity创建之前,有一个proxyFragmentFactory()操作需要执行,否则A->B的时候,A Fragment的onStop/onPause的生命周期不会走,这部分文档上没有写。
现在在ReportHelper上,找了半天,看能否统一封装到Fragivity里面,并且补充文档。
估计是val Fragment.navigator 中 [email protected] 导致的 换成 [email protected] 试试呢
作者您好,当项目中只有一个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)
1.关于pushWithPop字面意思,能实现开启二级页面并关闭一级页面吗? root的fragment能支持pushWithPop吗?
2.关于DeekLink的跳转 现在的逻辑是跳转到这个Fragment了 但是此Activity会默认加载它的root fragment ,这个root fragment可能不是我想要加载的。可以DeekLink跳转到的目的Fragment作为root吗?或者可选是否需要默认的root fragment
首个Fragment就需要传参的,怎么带参数加载?
ScanQRCodeFragment根视图 popSelf = true 的时候 到下一个页面 查看堆栈的图标点击闪退(这个问题需要修复)
Originally posted by @liukai2530533 in #18 (comment)
FragivityFragmentNavigator# ft.commit()
从Navigation过来的,项目迁移,遇到一个问题,关于自定义的抽屉菜单无法配合使用多顶层导航实现Fragment之间的管理
见:官方的抽屉式多顶层导航实现示例代码
起因是这样,因为项目使用了自定义布局的抽屉式写法类似(利用DrawerLayout实现自定义左右抽屉布局)
但是这样在放弃使用官方样式的同时也抛弃了NavigationView的使用和menu相关的配置
所以没办法通过Navigation去实现同时多个顶层导航,
然后看了下fragivity的示例代码,
发现在Activity中去通过loadRoot()方法设置好像也只可能有一个顶层导航,
所以希望大佬看看有没有实现的可能,
如果有的话,可以麻烦在代码中加上相关示例吗?
因为我认为这是一个强需求
大佬,这个框架的懒加载数据的时机可不可以跟AndroidX一样放在onResume()生命周期方法里面加载呢,有没有具体的例子参考下呢?
官方Demo中 CheckListFragment 中 加入切换页面的动画,发现无效果
private val _adapter by lazy {
CheckListAdapter { id, checked ->
navigator.push {
navOptions {
navOptions().applySlideInOut()
}
CheckItemFragment(id, checked, _cb)
}
}
}
navigator.navController.backStack.size,我刚刚试了,发现当只有一个fragment的时候,返回2,想问问还有其他方法可以获取到吗
版本: 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
使用场景比如:带底部导航的模式,下面四个button切换上面的fragment,目前我找了一圈,只看到Ext.kt
中有:
val Fragment.navigator
val View.navigator
应该再来一个Activity.navigator
吧
之前的版本没问题 升级到0.2.4版本之后我发现通过构造方法传参会被保存下来 比如点击News列表进入详情 点击第一条News进入NewsDetail ,然后我退出页面 再点第二条News 但是获取到的id还是第一条的id 。
我之前是可以通过构造传参的 现在是不支持了吗?如果要改动那工程量好大
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 就变了)
1、使用popSelf跳转界面后使用手机物理键还能返回上一级
Fragivity.of(this).pushTo(LoginFragment.class, new NavOptionsBuilder().popSelf(true).build());
2、如何替换根布局?比如说A界面是根布局,从A界面跳转到B界面,此时B界面操作退出登录,那么跳转到登录界面C,这时候如何清掉A界面和B界面并且把C界面设为根布局?因为退出登录后就不能再返回主界面了此时栈列应该只有C界面一个Fragment
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)
A页面pushto 到B页面。 B页面再次push或者pushto到A页面,A页面的生命周期会错乱
如果获取当前栈顶的fragment
在现有项目上进行改造,使用的阿里路由
navigator.push {
ARouter.getInstance().build(“”).navigation() as Fragment
}
这样可以启动一个fragment 但是其他属性就无法设置了,求解
大佬:
你好, 如标题所示,当升级到 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, 则表现是正常的
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)
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)
导航图是动态生成,那么by navGraphViewModels(R.id.xxxx)这个图内作用域共享的ViewModel是不是就没办法使用了?
情况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)
0.2.1 依赖下载不成功
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.