dboy233 / fragmentnavigatorhideshow Goto Github PK
View Code? Open in Web Editor NEW自定义Navigation FragmentNavigator 使用add hide 控制fragment,修改fragment状态onPause和onResume,提供Java和kotlin代码。
自定义Navigation FragmentNavigator 使用add hide 控制fragment,修改fragment状态onPause和onResume,提供Java和kotlin代码。
最后修改了FragmentNavigatorHideShow的隐藏显示片段,好像正常了
` //region 添加的代码
var frag: Fragment? = mFragmentManager.primaryNavigationFragment //查找当前导航栈顶的fragment,当前的flag
if (frag != null) {//如果当前存在,就hide。
ft.setMaxLifecycle(frag, Lifecycle.State.STARTED)
ft.hide(frag)
}
//查找目标导航fragment 如果查找到了就show这个fragment,如果没有查找到就创建一个新的fragment。
val tag = destination.id.toString()
var navfrag = mFragmentManager.findFragmentByTag(tag)//要导航的flag
//如果当前fragment == 目的地fragment,同样创建 这里处理我打开我自己的逻辑,判断是否需要重新创建一个新的 frag。
if (frag?.javaClass?.name == className) {
ft.setMaxLifecycle(frag, Lifecycle.State.RESUMED)
ft.show(frag)
} else if (navfrag != null) {
//fragment 已经存在显示
ft.setMaxLifecycle(navfrag, Lifecycle.State.RESUMED)
ft.show(navfrag)
} else {
//fragment 不存在创建,添加
navfrag = mFragmentManager.fragmentFactory.instantiate(mContext.classLoader, className)
navfrag.arguments = args//设置参数.
ft.add(mContainerId, navfrag, tag)
}
//endregion
//ft.replace(mContainerId, frag) //注释掉原有逻辑
ft.setPrimaryNavigationFragment(navfrag)//将新的目标fragment标记为栈顶。可以这么理解。
ft.setReorderingAllowed(true)
return ft`
Navigation 的版本更新为 2.4.0 后,HomeFragment 也会回调 onCreateView,页面还是会重绘。
首先感谢作者提供的思路,疑惑有二:
1.NavHostFragment
的createFragmentNavigator()
方法高版本已废弃了,有其他思路吗
2.containerId
在false条件下的nav_host_fragment_container
报错,根据备注理解是需要开发者自行填写Fragment容器布局的Id么。
麻烦了。
报错,找不到类名,请问作者有遇到吗,nav版本2.4.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.