当前位置: 首页 > news >正文

搓了大半个月屎山的总结(~模块化 默认模糊搜索转换之类的。。~)

尽量写成模块化的

包装器(Wrapper)可以不用,但是一堆函数列在一起要整洁(毕竟用了Warpper也写得一样多还不好理解(x
模块化
比如

@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun SettingsScreen(onBack: () -> Unit) {val context = LocalContext.currentval fragmentManager = (context as? FragmentActivity)?.supportFragmentManagervar hasNavigatedBack by remember { mutableStateOf(false) }
// Prevent double clickScaffold(topBar = {TopAppBar(title = { Text("设置") },navigationIcon = {IconButton(onClick = {if (!hasNavigatedBack) {hasNavigatedBack = trueonBack()}}) {Icon(Icons.AutoMirrored.Filled.ArrowBack, contentDescription = null)}})}) { padding ->val containerId = remember { android.view.View.generateViewId() }val fragmentTag = remember(containerId) { "prefs_fragment_$containerId" }AndroidView<FragmentContainerView>(factory = { ctx ->FragmentContainerView(ctx).apply {id = containerId}},modifier = Modifier.padding(padding).fillMaxSize())DisposableEffect(containerId) {val fragment = org.primftpd.prefs.FtpPrefsFragment()fragmentManager?.beginTransaction()?.replace(containerId, fragment, fragmentTag)?.commit()onDispose {fragmentManager?.findFragmentByTag(fragmentTag)?.let { existingFragment ->fragmentManager.beginTransaction().remove(existingFragment).commitAllowingStateLoss()}}}}
}

写成

                        FragmentContainerScreen("test1",{org.primftpd.ui.PftpdFragment()},{navController.popBackStack()})
//再onNavigate("test1")调用
//。。。。。。@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun FragmentContainerScreen(title: String,fragmentFactory: () -> androidx.fragment.app.Fragment, // 传入 Fragment 的构造方法onBack: () -> Unit
) {val context = LocalContext.currentval fragmentManager = (context as? FragmentActivity)?.supportFragmentManagervar hasNavigatedBack by remember { mutableStateOf(false) }Scaffold(topBar = {TopAppBar(title = { Text(title) },navigationIcon = {IconButton(onClick = {if (!hasNavigatedBack) {hasNavigatedBack = trueonBack()}}) {Icon(Icons.AutoMirrored.Filled.ArrowBack, contentDescription = null)}})}) { padding ->val containerId = remember { android.view.View.generateViewId() }val fragmentTag = remember(containerId) { "fragment_$containerId" }AndroidView<FragmentContainerView>(factory = { ctx ->FragmentContainerView(ctx).apply {id = containerId}},modifier = Modifier.padding(padding).fillMaxSize())DisposableEffect(containerId) {val fragment = fragmentFactory() // 在这里调用传入的构造器fragmentManager?.beginTransaction()?.replace(containerId, fragment, fragmentTag)?.commit()onDispose {fragmentManager?.findFragmentByTag(fragmentTag)?.let { existingFragment ->fragmentManager.beginTransaction().remove(existingFragment).commitAllowingStateLoss()}}}}
}

GitHub按 / 本身的搜索是模糊的

谁不想急头白脸半天什么东西都搜不到呢
可以指定字符串取消匹配,repo:rD227/shizuku-ftp "extends Fragment"
可以-去掉某些词

还可以用正则 (虽然我觉得这个东西长得不像正则
如repo:rD227/shizuku-ftp /extends\s+Fragment\b/
\s+:匹配一个或多个空格
\b:匹配单词边界,确保搜到的是 Fragment 而不是 FragmentXXXX

最后随便写点(用正常的东西

EventBus(难以调试),应该用 ViewModel
FragmentManager本来就没办法写@composable那样的可以预览组合的东西,管理回退之类的还需要手动 复制继承了这样的仓库(或者没得选,要不全自己重新写)那没辙了 所以我复制重写 和 重新建房子都试试看感觉吧

A G Fra Nav Activi
管理方式 手动 add/replace/commit 声明式。通过图形化路由表管理 系统级。由 OS 管理 Activity 栈
回退栈 手动 自动管理。逻辑清晰且可预测 自动管理。受 LaunchMode 影响
参数传递 Bundle (容易拼错 Key) Safe Args (插件自动生成代码,类型安全) Intent (容易拼错 Key)
转场动画 需在事务中手动指定 在 XML 中全局统一配置 需使用 overridePendingTransition
开销 极轻量 轻量 (基于 Fragment) 较重。涉及进程/系统的窗口切换 (A G)

http://www.jsqmd.com/news/592784/

相关文章:

  • 5分钟掌握B站视频下载的终极解决方案
  • 面向边缘智能:一种基于自适应注意力的轻量级语义通信编码方案
  • 久坐腰酸背痛不是累的!颈椎病腰间盘突出早已找上门!这些诱因你每天都在踩
  • PDF导出与直接打印:工资条生成器的输出方案
  • 5步掌握iOS虚拟定位:iFakeLocation安全实现指南
  • 大儒家观之功夫论:跨文化精神技术学纲要
  • Comsol模拟锌离子电池电场分布、浓度场分布基础模型与教程(含锌枝晶锂枝晶模拟):拍指定链接...
  • 天际模组冲突终结者:智能排序系统全解析
  • Markor:Android平台终极文本编辑器完全指南
  • 如何快速掌握Python机器人学:面向开发者的完整工具箱指南
  • ComfyUI-VideoHelperSuite视频工作流加载故障的完整修复指南
  • 【架构实战】数据湖架构设计与实践
  • [视频碎片修复]:解决B站缓存无法播放问题的技术方案与实践指南
  • Tesseract安装遇阻:Download error与Send Request Error的终极解决方案#附语言包下载
  • 开源模拟器技术指南:突破硬件限制的跨平台游戏体验
  • 天梭官方售后服务中心新址实地考察报告(2026年4月最新地址电话) - 亨得利官方服务中心
  • python Value
  • 蔚蓝档案风格Logo制作工具:从设计痛点到技术实现的完整指南
  • 2025届必备的AI论文工具实际效果
  • 别再东拼西凑了!保姆级教程:用Anaconda在Windows上搞定PaddleOCR CPU版(附shapely安装避坑指南)
  • 北京VAE707乳液厂家多场景精准推荐 - 企业推荐官【官方】
  • 手把手教你用ModelScope替代HuggingFace:从注册到下载ChatGLM3-6b的完整指南
  • Visual Studio系统环境净化指南:从污染诊断到环境重生的完整路径
  • 手麻腰痛别只贴膏药!颈椎病腰间盘突出拖延会致残!这些信号一定要早警惕
  • Koikatu HF Patch完整指南:5分钟解锁200+插件和英文翻译
  • STM32标准库GPIO操作函数全解析:从SetBits到Write的实战避坑指南
  • 抖音无水印批量下载工具:高效内容采集解决方案
  • 别让内存拖后腿!Ascend C算子开发中的内存优化实战(附性能分析工具Profiler使用指南)
  • 如何在复杂逻辑谜题中寻找确定性答案:MiniSat 求解器的极简哲学
  • 卡地亚官方售后服务中心新址实地考察报告(2026年4月最新地址电话) - 亨得利官方服务中心