问题标签 [fragment-lifecycle]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
android - Android中标签的生命周期
我正在使用 TabLayout 和 ViewPager 来实现 5 个选项卡作为主/详细布局的详细视图。
当我单击主视图中的某个项目时,它会创建我的详细视图,该视图又会创建必要的选项卡。创建详细视图时,将调用选项卡的 onResume() 方法。当我返回主视图时,会调用详细视图的 onPause(),但不会调用选项卡的 onPause()。
这是一个问题,因为我在每个选项卡的 onResume() 方法中订阅了事件,但是应该在每个选项卡的 onPause() 中完成的取消订阅永远不会发生。
因此,如果我在主视图中的项目上单击 n 次,则订阅完成 n 次,每个事件处理 n 次。
我尝试了这个解决方案https://looksok.wordpress.com/2013/11/02/viewpager-with-detailed-fragment-lifecycle-onresumefragment-including-source-code/ 我在 SO 答案中找到的,但它没有用因为 onFragmentPause() (Id 0) 中片段的 id 与 onFragmentResume() 中片段的 id 不同(因此 onFragmentPause() 中的订阅为空)。
我不明白如何让选项卡片段在每次单击项目时都不重复,或者如何让它们调用它们的 onPause() 方法。
android - 如何更改 android 代码以使其再次工作?
我是一个遵循一本书的android初学者。现在我遇到了一个问题。测试应用程序是一个新闻应用程序,代码如下:
但在新的 android API 中,代码
必须改为
我更改了它,但应用程序在更改后显示任何内容!我想知道为什么我错了以及如何改变它。非常感谢。PSNewsAdapter 类扩展了 ArrayAdapter。News 类只有两个字符串 NewsAdapter 方法是:
android - android - 带有bottomnavigationview onSaveInstanceState的片段回栈无法正确调用
我的片段 onSaveInstanceState 有问题。我在 stackoverflow 和其他网站上搜索,我的问题没有完全相同的问题。
我有一个底部导航视图(如果重要的话,它不是 android 支持库底部导航视图)。底部导航视图有 4 个按钮来代表 4 个不同的片段。主页、搜索、通知、个人资料。
- 启动 HomeFragment (添加到 backstack )
- 转到 NotificationsFragment (添加到后台堆栈)
- 去 SearchFragment (添加到 backstack )
- 转到 NotificationsFragment(从后台堆栈弹出):但实例状态未保存。
这是我的片段生命周期日志。我登录了 Fragment:onSaveInstanceState() 函数,但它没有被调用,所以保存实例状态不会调用。
MainActivity2.java
BottomNavigationView 片段的示例片段之一
NotificationsFragment.java
编辑我刚刚添加了主屏幕图像。
android - AppCompat 片段生命周期已更改
更新到新的 appcompat 库后,com.android.support:appcompat-v7:25.1.0
我在事务中替换片段时有了新的片段生命周期。
例如,我有两个片段FrFirst
和FrSecond
登录onStart
,onStop
我将 first 替换为 second ,然后将 second 替换为 first: FrFirst -> FrSecond -> FrFirst
。
在以前的 appcompat 版本中,我可以阅读以下日志:
FrFirst:导航到第二个
FrFirst:停止
FrSecond:开始FrSecond:导航到第一个
FrSecond:停止
FrFirst:开始
在 25.1.0 中,此日志:
FrFirst:导航到第二个
FrSecond:开始
FrFirst:停止FrSecond:导航到第一个
FrFirst:开始
FrSecond:停止
所以现在onStart
呈现在onStop
当前之前调用的片段。
为什么方法顺序发生了变化,是支持库中的错误吗?
android - 在活动中保存多个片段的状态
我正在开发一个应用程序,但有一件具体的事情让我感到困扰。假设我有一个活动和两个片段。FragmentA 和 FragmentB 和 FragmentA 在活动开始时附加。
我想在方向发生变化时保存片段数据和片段状态。我已经使用OnSavedInstanceState
方法成功保存了片段数据。现在我想在活动中保存片段状态,以便如果发生方向变化,我想在我所在的片段上(在我的情况下,FragmentA 或 FragmentB 取决于在配置更改发生之前显示的那个)。
这就是我在Activity中保存片段状态的方式:
这就是我在方向改变发生时检索我所在的片段的方式:
现在场景 1: 如果我在片段 A 上并且我旋转设备,那么一切都可以正常工作。像片段一样具有将数据加载到列表视图中的 Web 服务,因此我检查数据是否存在,则无需运行 Web 服务并且该服务现在可以工作
场景 2: 如果我在片段 B 上并且方向发生变化,一切正常,因为它应该在片段 B 上。现在当我按下返回按钮时,片段 A 再次被调用,所有数据也来自服务。我认为这不应该发生,因为它应该在BackStack中并且它的数据被保存了。那么我现在应该在这里做什么?
场景 3:在 FragmentB 上,我注意到当我旋转设备时, FragmentA 的 saveInstanceState 函数也会被调用。为什么会这样?我在哪里用 FragmentA 替换 FragmentB ?
一些困惑:
让我也谈谈一些困惑,也许有人向我解释了尽管我已经搜索并阅读了很多关于片段和活动生命周期的内容,实际上我想保存每个活动的数据和设备旋转的片段。我知道如何使用活动(如何保存状态)来做到这一点,所以我也知道如何在片段中做到这一点(保存片段视图的状态)现在我很困惑如何告诉活动显示哪个片段以及在配置之后去哪个变化(旋转)?如果我在 FragmentB 上,FragmentA 会发生什么情况?它会在后台一次又一次地连接和分离吗?
android - 片段再次调用相同的网络调用
我有2个片段。在第一个片段中,有一个我从服务器获取的项目的列表视图。当我单击一个列表项时,它将导航到第二个片段,其中包含我单击的项目的详细信息。但是当我按下并导航到上一个片段时,我必须经历从服务器获取数据的相同过程。有没有办法避免这种情况?我可以导航回上一个片段而不再次发出该网络请求吗?
android - 了解片段事务期间的片段生命周期方法调用
我创建了一个演示,以了解在片段事务的不同情况下调用了哪些片段生命周期的方法。虽然大多数调用都符合预期,但我仍然对我用粗体写的东西感到困惑。
假设有两个片段 A 和 B,我们正在它们之间执行事务
情况1
当 Fragment B 添加到 Fragment A 时
片段 B
附加
创建
onCreateView
onActivityCreated
开始
恢复
没有调用片段 A 的生命周期方法。
我期待的是什么?
由于 Fragment A 不可见,因此调用 Fragment A 的 onStop 方法
根据文档-
已停止 - 片段不可见。主机活动已停止,或者片段已从活动中删除但已添加到后台堆栈。已停止的片段仍然存在(系统保留所有状态和成员信息)。但是,它不再对用户可见,并且如果该活动被终止,它将被终止。
这是否意味着在同一活动中添加新片段时不会调用当前片段的方法?
然后popBackStack()
在片段 B 中使用
片段 B
暂停
停止
销毁视图
销毁
分离
没有调用片段 A 的生命周期方法
我期待的是什么?
由于 Fragment A 现在可见,因此调用 Fragment A 的 onStart 方法
案例2
当 Fragment B 替换 Fragment A 时
片段 B
附加
创建
onCreateView
onActivityCreated
开始
恢复
片段 A
暂停
停止
销毁视图
销毁
分离
一切都如预期
案例3
当 Fragment B 替换 Fragment A 时,将其保留在 backstack 中
片段 B
附加
创建
onCreateView
onActivityCreated
开始
恢复
片段 A
暂停
停止
销毁视图
没有调用 Fragment A 的 onDestroy 和 onDetach 方法。为什么没有调用它?Bcoz 根据文档方法replace
删除容器中已经存在的所有片段并将新片段添加到同一个容器中
然后popBackStack()
在片段 B 中使用
片段 A
onCreateView
onActivityCreated
开始
恢复
片段 B
暂停
停止
销毁视图
销毁
分离
android - Android onCreateOptionsMenu 在方向改变时调用了两次
我正在玩 Android 生命周期,我发现一个似乎记录不充分的行为(或者我只是做错了什么)。
在https://developer.android.com/reference/android/app/Activity.html#onCreateOptionsMenu(android.view.Menu)中指定的 onCreateOptionsMenu 方法应该只被调用一次,但它被打印了两次在方向变化期间。
以下是创建流程日志,可以看到在 onPostResume 方法之后调用了 onCreateOptionsMenu 方法:
但是当由于方向改变而恢复状态时,它也会在 onRestoreInstanceState 方法之后调用:
值得注意的是,这种行为只发生在没有 Support 库的 API > 19 中。
用于记录的代码非常简单。SimpleActivity 配置内容视图并将 SimpleFragment 的实例添加到 FragmentManager(如果尚未添加):
LoggerActivity 和 LoggerFragment 实现了所有生命周期方法,并在每个方法上调用 Utils.logBeforeSuper 和 Utils.logAfterSuper。
那么,我想知道预期的行为是什么?我是否遗漏了什么或没有记录?
一些链接
完整的日志文件可以在这里找到(方向更改流程从第 108 行开始):https ://docs.google.com/spreadsheets/d/1u97W9QZIEDcJt1Q2xh5VQP4YliHjzHE0u2OlLF4y5WY/edit#gid=0
该项目托管在github上:(我没有足够的声誉添加更多链接)
android - 为什么在按下后退按钮时会调用当前片段的 oncreateview?
我正在尝试从后台检索片段。它正在被检索,但问题是在按下后退按钮时,oncreate 视图和当前片段的后续生命周期方法也被调用。这是我将片段放入后台堆栈的代码:
这是片段的代码:
android - AppCompatActivity onDestroy 调用 Fragment 的 onCreateView?
在我的应用程序中,我的 MainActivity 包含两个选项卡式片段。不知何故,我得到了一个从 MainActivity 的 onDestroy 演变而来的异常,该异常最终调用了 Fragment 的 onCreateView。
我知道在片段的生命周期中,onCreateView 应该在 onDestroyView 之后调用,而不是在 onDestroy 之后调用。
我实际上不知道如何重现此问题,但我附上了堆栈跟踪:
最后,这个 onCreatView 正在创建一个从我的代码演变而来的空指针异常,但我不想用(如果 mMember != null)或其他东西来修补它,我想了解发生了什么以及为什么会发生这种流程这边走。
谢谢。