Nextcloud Android Activity 迁移至 Navigator Fragment 的映射指南
移动开发企业应用【免费下载链接】android Nextcloud Android app项目地址https://gitcode.com/gh_mirrors/andr/android点击查看免费下载导读本文以 Nextcloud Android 客户端仓库中「Activity API → Navigator Fragment Equivalent」映射文档为核心系统讲解如何将基于DrawerActivity/FileActivity的传统页面迁移为基于NavigatorActivityFragment的新导航架构。你将掌握生命周期回调、Toolbar 与抽屉、菜单、返回键、依赖注入、Activity Result 等 API 的一一对应关系并理解NavigatorScreen、Navigator、NavigatorOnBackPressListener等核心机制的底层实现可直接用于仓库内「活动流、社区、通知、回收站、上传列表」等屏幕的迁移实战。一、迁移背景从 Activity 到 Navigator FragmentNextcloud Android 客户端AndroidManifest.xml长期以DrawerActivity、FileActivity等 Activity 承载主界面。在向单一宿主 多 Fragment 的导航模型演进过程中仓库引入了位于 app/src/main/java/com/owncloud/android/ui/navigation 的新导航框架NavigatorActivity唯一宿主 Activity继承DrawerActivity见 NavigatorActivity.kt持有ActivityNavigatorBinding内含一个fragmentContainerView与一个drawerLayout。NavigatorScreen密封类描述「屏幕」的 tag、是否带抽屉、菜单项 ID、ActionBar 样式与对应 Fragment 工厂见 NavigatorScreen.kt。当前已注册 5 个屏幕Activities、Community、NotificationshasDrawer false、Trashbin、UploadList。Navigator基于FragmentManager与ArrayDequeNavigatorScreen维护返回栈的导航器见 Navigator.ktpush()通过replace(...).addToBackStack(tag)入栈pop()出栈并返回栈顶屏幕。NavigatorOnBackPressListenerFragment 侧拦截返回键的接口见 NavigatorOnBackPressListener.kt提供canInterceptBackPress()与interceptBackPress()两个方法。从源码结构可以推断迁移的总目标是把「页面自身 UI 与状态」全部下沉到 Fragment而把「Toolbar、抽屉、导航返回栈」等公共框架职责收敛到宿主NavigatorActivity。以下映射表即这一职责再分配的操作手册。二、核心映射表Activity API → Fragment API原始映射文档给出了完整的逐项对照表以下结合仓库源码逐条展开原 Activity 写法迁移后的 Fragment 写法class X : DrawerActivity()/FileActivity()class XFragment : Fragment()onCreatesetContentView(binding.root)onCreateViewbinding FragmentXBinding.inflate(inflater, container, false)onCreate中的 View 设置onViewCreatedonCreate中的非 View 设置intent extras、configonCreate用savedInstanceState null守卫 extrasonCreate中注册 View/Receiver 对应的onDestroy清理onDestroyViewonStart/onStop/onResumeFragment 上同名回调setupToolbar()、updateActionBarTitleAndHomeButtonByString、setupDrawer(menuItemId)删除改由NavigatorScreen.actionBarStyle() 宿主处理getMenuItemId()、highlightNavigationViewItem()删除改由NavigatorScreen.menuItemId() 宿主处理onCreateOptionsMenu/onOptionsItemSelectedMenuProvider以viewLifecycleOwner, Lifecycle.State.RESUMED注册不属于自己的 ID 返回falseandroid.R.id.home→ 切换抽屉删除宿主统一处理内部导航用的OnBackPressedCallbackNavigatorOnBackPressListenermDrawerToggle.isDrawerIndicatorEnabled xnavigatorActivity?.setDrawerIndicatorEnabled(x)addDrawerListener(l)activity?.findViewByIdDrawerLayout(R.id.drawer_layout)?.addDrawerListener(l)startActionMode(cb)navigatorActivity?.startActionMode(cb)findViewById(R.id.sort_button)Toolbar 视图activity?.findViewById(...)Toolbar 属于宿主对话框用的supportFragmentManagerchildFragmentManager当对话框需要回调 Activity 时用requireActivity().supportFragmentManagerthis作为ContextrequireContext()回调内需先捕获再启动this作为ActivitySnackbar、PopupMenu、适配器requireActivity()/ 类型化宿主lifecycleScopelifecycleScopeFragment 生命周期返回栈上存活或viewLifecycleOwner.lifecycleScope仅 View 任务user、storageManager、clientRepository、capabilitiesnavigatorActivity?.user、.storageManager、.clientRepository、.capabilitiessetUser(user)navigatorActivity?.setUser(user)BaseActivity.setUser是 public 的startActivityForResultonActivityResultregisterForActivityResult(StartActivityForResult())作为 Fragment 属性finish()activity?.finish()DisplayUtils.showSnackMessage(this, …)DisplayUtils.showSnackMessage(requireView(), …)/SnackbarUtil.show(this, …)内部BroadcastReceiver类private val receiver object : BroadcastReceiver() { … }避免文件内多出额外类型Inject var x: T? null配JvmFieldInject lateinit var x: T继承自基类的字段viewThemeUtils、preferences、connectivityService、accountManager、backgroundJobManager在 Fragment 中Inject lateinit var注入三、生命周期与 View 绑定迁移3.1onCreateView替代setContentView原 Activity 在onCreate中setContentView(binding.root)迁移后 Fragment 改为override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { binding FragmentXBinding.inflate(inflater, container, false) return binding!!.root }仓库中 CommunityFragment.kt、TrashbinFragment.kt、UploadListFragment.kt 均遵循这一模式。注意 ViewBinding 在 Fragment 中需在onDestroyView置空避免内存泄漏——ActivitiesFragment.kt 即示范了onDestroyView中binding null的清理。3.2 非 View 初始化移到onCreate并用savedInstanceState守卫Intent extras、账号切换等配置逻辑放到 Fragment 的onCreate且必须以savedInstanceState null守卫避免旋转重建后重复执行。示例UploadListFragment.kt 在onCreate中仅当savedInstanceState null时调用setUserFromIntent()。3.3onStart/onStop/onResume原样保留Fragment 提供与 Activity 同名的生命周期回调原onStart/onStop/onResume中的逻辑可直接搬运。仓库中 TrashbinFragment.kt 的onPause即延续了 Activity 时代的暂停清理语义。四、Toolbar、菜单与抽屉的职责上收4.1 ActionBar 与抽屉由宿主统一配置原 Activity 中的setupToolbar()、updateActionBarTitleAndHomeButtonByString、setupDrawer(menuItemId)一律删除。宿主NavigatorActivity在 setupActionBar() 中根据NavigatorScreen.actionBarStyle()决定使用setupToolbar()还是setupHomeSearchToolbarWithSortAndListButtons()再调用updateActionBarTitleAndHomeButtonByString(getString(titleId))设置标题同时根据screen.hasDrawer决定抽屉解锁或锁定LOCK_MODE_LOCKED_CLOSED。NavigatorScreen.actionBarStyle()返回PairActionBarStyle, Int当前 5 个屏幕均为ActionBarStyle.Plain 对应标题资源见 NavigatorScreen.ktActionBarStyle枚举定义在 model/ActionBarStyle.kt。4.2 菜单迁移到MenuProviderFragment 使用MenuProvider贡献菜单项注册时绑定viewLifecycleOwner与Lifecycle.State.RESUMED确保菜单随 Fragment View 生命周期自动加入/移除(requireActivity() as MenuHost).addMenuProvider( object : MenuProvider { override fun onCreateMenu(menu: Menu, menuInflater: MenuInflater) { menuInflater.inflate(R.menu.activity_trashbin, menu) } override fun onMenuItemSelected(menuItem: MenuItem): Boolean { // 处理自己拥有的菜单 ID不属于自己的 ID 返回 false return false } }, viewLifecycleOwner, Lifecycle.State.RESUMED )仓库实例如 TrashbinFragment.addMenuProvider()处理action_empty_trashbin与 NotificationsFragment.setupMenu()。对android.R.id.home的点击不再由 Fragment 处理——宿主 NavigatorActivity.onOptionsItemSelected() 会先询问NavigatorOnBackPressListener再决定关闭抽屉或弹出返回栈。4.3 Toolbar 视图属于宿主排序按钮、网格切换按钮等 Toolbar 内视图由宿主创建Fragment 只能通过activity?.findViewById(...)操作。例如 TrashbinFragment.setupContent() 通过activity?.findViewByIdView(R.id.sort_list_button_group)与activity?.findViewByIdMaterialButton(R.id.sort_button)控制排序按钮的可见性并挂点击监听且明确把switch_grid_view_button隐藏。4.4 抽屉指示器与监听器mDrawerToggle.isDrawerIndicatorEnabled x→navigatorActivity?.setDrawerIndicatorEnabled(x)。该方法是DrawerActivity的 public 方法见 DrawerActivity.java。addDrawerListener(l)→activity?.findViewByIdDrawerLayout(R.id.drawer_layout)?.addDrawerListener(l)。TrashbinFragment.kt 将其内部MultiChoiceModeListener同时实现AbsListView.MultiChoiceModeListener与DrawerLayout.DrawerListener注册到宿主的drawer_layout实现「拖拽抽屉时关闭多选 ActionMode」的联动。4.5 ActionModestartActionMode(cb)改为navigatorActivity?.startActionMode(cb)。Trashbin 在长按文件时调用 navigatorActivity?.startActionMode(multiChoiceModeListener)使 ActionMode 的装饰性状态栏颜色等由宿主统一承载。五、返回键与内部导航5.1NavigatorOnBackPressListener替代OnBackPressedCallbackFragment 内部存在多级导航如回收站目录层级、搜索过滤状态时不再自行注册OnBackPressedCallback而是实现NavigatorOnBackPressListener接口。宿主 NavigatorActivity.setupBackPressedHandler() 在onBackPressedDispatcher中统一决策抽屉打开 → 关闭抽屉顶层 Fragment 实现NavigatorOnBackPressListener且canInterceptBackPress()返回 true → 调用其interceptBackPress()返回栈只剩 1 层 →finish()否则 →pop()出栈。android.R.id.home的点击同样遵循该查询顺序见 NavigatorActivity.kt。Trashbin 的典型实现override fun canInterceptBackPress(): Boolean (trashbinPresenter?.isRoot false) override fun interceptBackPress() { trashbinPresenter?.navigateUp() }见 TrashbinFragment.kt仅当不在根目录时拦截返回键用于回收站目录的逐级向上导航。5.2 宿主与 Fragment 的协作宿主通过Navigator的getTopScreen()依据FragmentManager返回栈条目名称还原当前NavigatorScreenNavigator.kt并在onResume中调用highlightOrRestoreNavigationViewItem()恢复抽屉高亮NavigatorActivity.kt。NavigatorScreen.menuItemId()将屏幕映射到抽屉菜单资源 ID如R.id.nav_community、R.id.nav_trashbinNotifications返回-1表示不参与抽屉高亮NavigatorScreen.kt。六、上下文、账号与依赖获取6.1 Context 与 Activity 的获取this作Context→requireContext()在回调如协程、监听器内必须先捕获再使用避免 Fragment 已 detach。this作Activity→requireActivity()或使用类型化宿主扩展。仓库提供 FragmentExtensions.kt 中的typedActivity()reified 版与getTypedActivity(type)Java Class 版内部检查isAdded与类型匹配。UploadList 即定义private val navigatorActivity: NavigatorActivity? get() getTypedActivity(NavigatorActivity::class.java)UploadListFragment.kt。6.2 账号与宿主资源代理原来直接读字段的user、storageManager、clientRepository、capabilities改经宿主转发navigatorActivity?.user、.storageManager、.clientRepository、.capabilities。切换账号的setUser(user)也委托宿主——BaseActivity.setUser是 public 方法BaseActivity.javaNavigatorActivity继承自DrawerActivity而DrawerActivity又继承BaseActivity因此navigatorActivity?.setUser(user)可直接调用。Trashbin 即用此机制在「不同用户打开回收站」场景切换账号TrashbinFragment.kt。6.3 依赖注入迁移基类字段viewThemeUtils、preferences、connectivityService、accountManager、backgroundJobManager等在 Activity 中通过继承获得迁移后改为在 Fragment 中显式注入Inject lateinit var preferences: AppPreferences Inject lateinit var viewThemeUtils: ViewThemeUtils Inject lateinit var connectivityService: ConnectivityServiceTrashbin 的注入清单见 TrashbinFragment.kt。Fragment 注入由宿主NavigatorActivity.onAttachFragment()中的AndroidSupportInjection.inject(fragment)完成NavigatorActivity.kt该注释还说明addFragmentOnAttachListener或registerFragmentLifecycleCallbacks无法提供同样效果故保留了对onAttachFragment的使用。注意JvmField var x: T? null的旧写法统一改为Inject lateinit var x: T。七、Activity Result、对话框与 Snackbar7.1 Activity Result APIstartActivityForResultonActivityResult弃用改为在 Fragment 中以属性形式注册private val credentialsUpdateLauncher registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result - if (result.resultCode Activity.RESULT_OK) { restartUploadsIfNeeded() } }见 UploadListFragment.kt。由于 Fragment 在返回栈上存活注册的 launcher 随 Fragment 生命周期自动管理。7.2 FragmentManager 的选择对话框默认使用childFragmentManager当对话框需要回调 Activity 侧逻辑时改用requireActivity().supportFragmentManager。Trashbin 的openActionsMenu即通过navigatorActivity?.supportFragmentManager展示TrashbinFileActionsBottomSheet并设置结果监听TrashbinFragment.kt。7.3 Snackbar 与提示DisplayUtils.showSnackMessage(this, …)改为DisplayUtils.showSnackMessage(requireView(), …)或SnackbarUtil.show(this, …)。SnackbarUtil接收 Fragment仓库中如 TrashbinFragment.kt 的SnackbarUtil.show(this, R.string.associated_account_not_found)与 NotificationsFragment.kt 的失败提示均采用此写法。7.4 BroadcastReceiver 内联化内部BroadcastReceiver类改为 Fragment 私有属性避免文件内多出额外类型private val uploadFinishReceiver object : BroadcastReceiver() { override fun onReceive(context: Context?, intent: Intent?) { throttler.run(UPDATE_UPLOAD_LIST_KEY) { uploadListAdapter.loadUploadItemsFromDb() } } }见 UploadListFragment.kt配合LocalBroadcastManager实现上传状态刷新。八、Dialog listener 查找的坑与兜底链对话框通过activity as Listener强转回调的模式在迁移后失效——因为监听器现在可能位于 Fragment 而不是宿主 Activity。原始映射文档专门记录了 Trashbin 修复SortingOrderDialogFragment时采用的兜底查找链val listener parentFragment as? OnSortingOrderListener ?: activity as? OnSortingOrderListener ?: requireActivity().supportFragmentManager.fragments .firstOrNull { it is OnSortingOrderListener } as? OnSortingOrderListener查找顺序为先查parentFragment对话框嵌在 Fragment 内时再查宿主 Activity最后遍历supportFragmentManager.fragments找实现者。TrashbinFragment本身实现了OnSortingOrderListenerTrashbinFragment.kt排序结果通过onSortingOrderChosen回传。迁移时必须逐一检查每个屏幕弹出的对话框是否存在同样的强转模式否则会出现运行时ClassCastException。九、迁移实践清单以仓库当前已迁移的 5 个屏幕为参考完整迁移步骤可归纳为类声明class XFragment : Fragment()按需实现NavigatorOnBackPressListener、Injectable及原接口。ViewBindingonCreateViewinflateonViewCreated做 View 设置onDestroyView置空 binding。非 View 逻辑onCreate中以savedInstanceState null守卫。删除setupToolbar()、setupDrawer()、getMenuItemId()、highlightNavigationViewItem()、android.R.id.home处理、OnBackPressedCallback。菜单MenuProviderviewLifecycleOwnerLifecycle.State.RESUMED不拥有的 ID 返回false。宿主交互user/storageManager/clientRepository/capabilities/setUser一律走navigatorActivity?.或getTypedActivity(NavigatorActivity::class.java)获取类型化宿主。结果回调Activity Result 用registerForActivityResult属性对话框用childFragmentManager或宿主supportFragmentManager并核查 Listener 兜底链。注入原基类字段改为Inject lateinit var。生命周期作用域仅 View 任务用viewLifecycleOwner.lifecycleScope跨返回栈存活的逻辑用 Fragment 的lifecycleScope。当前仓库已落地的实例可作为对照模板TrashbinFragment.kt返回键拦截 ActionMode 排序对话框、UploadListFragment.ktActivity Result BroadcastReceiver 宿主代理、NotificationsFragment.ktMenuProvider 生命周期协程、ActivitiesFragment.kt 与 CommunityFragment.kt轻量 View 场景。十、注意事项与边界宿主NavigatorActivity的onOptionsItemSelected对android.R.id.home返回trueFragment 的MenuProvider不应再处理该 IDNavigatorActivity.kt。Navigator.push()会通过fragmentManager.findFragmentByTag(screen.tag)防重复入栈Navigator.kt因此屏幕 tag 需全局唯一。NavigatorScreen实现了ParcelableParcelize以EXTRA_SCREEN形式随 Intent 传入宿主NavigatorActivity.ktNavigatorActivity.intent(context, screen)是推荐的启动方式。上述行为与结论均基于当前仓库源码2026 年迭代的导航框架版本若后续框架演进以仓库最新实现为准。赞分享移动开发企业应用【免费下载链接】android Nextcloud Android app项目地址https://gitcode.com/gh_mirrors/andr/android点击查看免费下载相关推荐Nextcloud Android「Activity 转 Navigator Fragment」十大坑从崩溃到旋转失忆的避坑指南Nextcloud Android「Activity 转 Navigator Fragment」十大坑从崩溃到旋转失忆的避坑指南 本文以 Nextcloud移动开发企业应用Android 中的 MVC 架构模式Model-View-Controller 的职责划分与 Activity/Fragment 的现实映射Android 中的 MVC 架构模式Model View Controller 的职责划分与 Activity/Fragment 的现实映射 MVCMod文档教程知识库Nextcloud Android 导航重构实战将 DrawerActivity 页面平滑迁移到 NavigatorActivity Fragment 架构Nextcloud Android 导航重构实战将 DrawerActivity 页面平滑迁移到 NavigatorActivity Fragment 架移动开发企业应用上一篇FoundationDB Joshua 模拟测试统计工具 joshua_stats 使用指南下一篇Prisma 客户端生成器深度剖析从 Airbnb 数据模型到完整 TypeScript 客户端的自动化生成创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

PyJWT 密钥获取实战:使用 cryptography 从 x509 证书中提取公钥/私钥完成 JWT 签名与验签

PyJWT 密钥获取实战:使用 cryptography 从 x509 证书中提取公钥/私钥完成 JWT 签名与验签

后端认证鉴权 【免费下载链接】pyjwt JSON Web Token implementation in Python 项目地址: https://gitcode.com/gh_mirrors/py/pyjwt 点击查看 免费下载 本文讲解如何借助 cryptography 库的 load_pem_x509_certificate() 函数,从 PEM 格式的 x509 证书…

2026/10/12 2:20:18 阅读更多 →
SoftwareCopyright-Skill 软著鉴别材料规则全解析:前后 30 页代码选材、90 列折行与 Word 自动分页实战

SoftwareCopyright-Skill 软著鉴别材料规则全解析:前后 30 页代码选材、90 列折行与 Word 自动分页实战

AI 技能文档 【免费下载链接】SoftwareCopyright-Skill 中国软件著作权申请材料 生成器 Skills,本 Skills 通过阅读本地项目,自动生成全套 .docx 软著申请材料,全开源,无须再付费购买任何软著申请服务 项目地址: https…

2026/10/12 2:19:18 阅读更多 →
ant-design-blazor Select 分组选择器(GroupName)实战指南:Option Group 实现与键盘导航

ant-design-blazor Select 分组选择器(GroupName)实战指南:Option Group 实现与键盘导航

前端UI组件设计系统 【免费下载链接】ant-design-blazor 基于 Ant Design 与 Blazor 的前端组件库。让开发者解放生产力,实现更大价值。 项目地址: https://gitcode.com/ant-design-blazor/ant-design-blazor 点击查看 免费下载 导读 本文以 ant-desig…

2026/10/12 2:19:18 阅读更多 →

最新新闻

PLC基本指令详解:从位逻辑到定时计数,掌握梯形图编程核心

PLC基本指令详解:从位逻辑到定时计数,掌握梯形图编程核心

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 3:19:56 阅读更多 →
柔性上料盘如何替代振动盘:从换型瓶颈到视觉引导的产线升级指南

柔性上料盘如何替代振动盘:从换型瓶颈到视觉引导的产线升级指南

简介:《全球与中国柔性上料盘市场现状及未来发展趋势(2024版)》是一份QYResearch出品的专业市场研究报告,面向柔性上料与自动化产线设备从业者、工业机器人厂商、市场分析师及投资研究人员。报告以2019至2023年为历史期、2024至20…

2026/10/12 3:19:56 阅读更多 →
WiFi分析工具设计实战:从数据采集到信道优化与故障排查

WiFi分析工具设计实战:从数据采集到信道优化与故障排查

1. 从一个标题说起:这个工具到底在解决什么问题第一次看到“Jev powered WiFi analysis tool”这个标题,我的直觉是:这大概率是一个把无线网络分析能力封装成轻量级工具的项目,名字里的“Jev”可能是作者自定的代号、模块名或者某…

2026/10/12 3:19:56 阅读更多 →
SpringBoot+Vue美食网站系统:前后端分离全栈项目架构与部署详解

SpringBoot+Vue美食网站系统:前后端分离全栈项目架构与部署详解

做个人项目这些年,前后端分离的练手项目做了不少,但每次有人让我推荐一个既能完整跑起来、又能覆盖主流开发流程的学习项目,我第一反应往往是这套美食网站系统。为什么?因为它的技术选型非常贴近当下中小型项目的真实组合&#xf…

2026/10/12 3:19:56 阅读更多 →
高斯赛德尔迭代法:大规模稀疏线性方程组的工程解法与实战技巧

高斯赛德尔迭代法:大规模稀疏线性方程组的工程解法与实战技巧

线性方程组这东西,刚接触数值计算的时候,总觉得不是事——高斯消元一把梭,n100也就是眨眨眼的事。可等你真在工程里碰到几十万未知量、矩阵非零元稀稀落落排成带状或块状的时候,直接法的“快”就变成了一种幻觉:要么内…

2026/10/12 3:19:56 阅读更多 →
attrs 比较机制完全指南:默认相等性、排序生成与自定义比较(Comparison)

attrs 比较机制完全指南:默认相等性、排序生成与自定义比较(Comparison)

后端 【免费下载链接】attrs Python Classes Without Boilerplate 项目地址: https://gitcode.com/gh_mirrors/at/attrs 点击查看 免费下载 本文围绕 attrs 官方文档 docs/comparison.md 展开,系统讲解 attrs 类实例的相等性(equality&#…

2026/10/12 3:18:56 阅读更多 →

日新闻

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

在数码相机、高清显示屏与现代矢量图形技术高度发达的今天,画面可以做到绝对的锐利、平滑与无瑕。然而,当一张秋日手账插画或拍立得照片过于“平整无瑕”时,往往会散发出一种冰冷生硬的“数码塑料感(Digital Plasticity&#xff0…

2026/10/12 0:00:59 阅读更多 →
活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

在现代网页与移动端设计中,横排(Horizontal Layout)早已经成为了绝对的主流。然而,当我们翻开泛黄的线装古籍、宋版木刻诗集,或是欣赏一张茶道雅集的手写便签时,那种**自上而下纵向书写、自右向左逐列铺展&…

2026/10/12 0:00:59 阅读更多 →
周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

每到周日的晚上八点到十点,很多人心里都会悄悄亮起一盏警示灯。 在心理学上,这种现象有一个专门的称谓——“周日夜晚焦虑症(Sunday Scaries)”。明天又是周一,闹钟又要重新在七点响彻卧房;脑海里仿佛有一个…

2026/10/12 0:00:59 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/12 0:16:30 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/12 0:16:43 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 10:45:37 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:53 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:54 阅读更多 →