问题标签 [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.

0 投票
5 回答
19355 浏览

android - 片段被销毁后停止处理程序

我有一个Fragment设置一个ListView并创建一个定期Handler更新的。Listview但是,看起来在被销毁Handler后仍然运行。Fragment

以下是代码。

ListView在销毁后更新Fragment会导致应用程序崩溃。当被摧毁时,我怎样才能导致Handler停止?Fragment我还想知道如果暂停应用程序也会产生什么影响Handler

0 投票
2 回答
735 浏览

android - 调用方法时片段未添加到活动中

我有一个名为 Chessboard 的主要活动。在 Chessboard 的 onCreate 中,我设置了一个片段活动 GameInfoFragment。在此之后,调用查询 SQLite 数据库,之后立即调用 SQLiteDataInterpreter 类中的方法。从这里,调用 GameInfoFragment 类中的方法,其中应该填充我在 Chessboard 的 onCreate 中设置的片段中的 imageViews。

当我尝试启动 Chessboard 活动时,我收到以下错误:

Chessboard 的 onCreate 中的代码如下:

以及导致问题的我的 GameInfoFragment 类中的相关代码:

导致问题的主要代码行是我尝试在上面的代码中设置takePieceHolderID 的值。

如何确保添加我的片段,以便在我的 Chessboard Activity 开始时填充其 imageViews?

0 投票
1 回答
342 浏览

android - 4.4中的Fragment生命周期错误,onCreateView()同时在多个Fragment上被调用

我收到错误:

错误,Android框架同时调用多个片段的onCreateView()

在此处输入图像描述

我有3 个导航抽屉FrameLayout:A、B、C

1.)通过抽屉的B选项,用户到达B2片段。

2.) 用户在B2片段上按下Home 键并进入主屏幕。

3.) 用户长按 Home 键,从Android的最近活动中打开此应用程序

在这里我收到错误,如图所示,蓝色为1

我的多个片段正在获取onCreate()和事件onCreateView()onActivityCreated()因此我正在丢失B2的片段状态,我的应用程序进入默认片段,即A1(从抽屉选项 A 打开)

我还保存了我的 B2 状态onSaveInstanceState()并恢复了,onActivityCreated()但这种方法不起作用,因为onActivityCreated()首先调用 B2,然后调用 A1。因此,我的 B2 片段在前台屏幕上不可见。取而代之的是,A1 在屏幕上可见

笔记 :

.replace()在所有情况下都用于切换片段

相同的代码在 Android 5.0+(Lollipop)中运行正确,但在 4.4(和旧版本)中出现错误

任何人都可以提出任何解决方法吗?

0 投票
1 回答
776 浏览

android - 如果片段不再在前台,则调用哪个方法?

我用导航抽屉和内容片段实现了一个活动。内容片段被多次替换。但是在某些时候,我必须提供一个跳转到具有特定状态的特定片段。我设法保存了所有必需的变量。它经常工作,但并不总是跳回。

如果特定片段调用他们的onPause()方法,我会在操作栏中显示一个按钮。但是,由于片段的生命周期与活动相关联并且活动没有变化,因此有时按钮不会出现,因为onPause()没有被调用。

所以:如果一个片段不再在前台,哪个方法总是被触发?我试过:onPause,, onStop....onHiddenChanged()

更新: 这是我保存游戏状态的代码,它放在片段中。直到现在它被放在onStop()方法中。gamelogic 变量是一个具有许多值和集合的对象。我将其保存到共享首选项中。

在我的主要活动中,我决定是否在操作栏上显示一个图标。通过按下此按钮,我使用已保存的游戏状态保持器重新启动片段。

0 投票
0 回答
654 浏览

android - DialogFragment 在方向更改后自行关闭

之前有人问过类似的问题,但我的情况不同。

我的应用程序中到处都是 DialogFragments。当我旋转手机时,除了这个之外,所有的 DialogFragments 都没有问题地返回。

我已经在生命周期回调中添加了 Log 消息,以查看发生了什么,这就是场景:

  1. 我的 DialogFragment 已创建并显示
  2. 在轮换时,我将任何我想要的东西保存到一个包中以便之后恢复。
  3. DialogFragment 已成功重新创建。我知道是因为调用了 onCreate 到 onResume 。
  4. 在恢复之后,由于某种莫名其妙的原因,onPause、onStop、onDestroyView、onDestroy 和 onDetach 立即被快速连续调用。DialogFragment 在重新创建后立即被销毁,我不知道为什么。

任何帮助深表感谢。DialogFragment 为结果启动一个活动以拍照。它适用于大多数手机,但 Galaxy S3 摄像头会导致方向更改,从而强制重新创建活动。我不介意,我知道如何处理活动娱乐,但我从未遇到过。

DialogFragment 是通过 RecyclerView 适配器回调从主托管活动中的常规片段启动的。

我没有在托管 RecyclerView 的片段中使用 ChildFragmentManger 显示 DialogFragment,因为多个片段可以显示此 DialogFragment 并且功能始终相同。无论哪个片段启动它,让活动接收回调更为谨慎。

从片段:

主托管活动收到回调并显示如下:

这些是我的生命周期回调:

编辑:我已经解决了这个问题。要显示 DialogFragment,我应该使用托管片段的 ChildFragmentManager 而不是活动。也就是说,改变这个:

对此:

是票。希望能帮助其他有类似问题的人。

0 投票
2 回答
1082 浏览

android - 在方向更改时创建两次嵌套片段

我创建了这个示例来了解 android 片段在屏幕方向更改时的生命周期。

MainActivity 是 DrawerLayout 的容器,DrawerLayout 允许您选择一个片段,该片段将填满 MainActivity 屏幕。

然后我有ParentPagerFragment,ParentPagerFragment 只包含一个带有3 个ChildTextViewFragments 的ViewPager。

ChildTextViewFragment 仅用于显示一些文本

在我第一次运行此示例后,我按预期收到了这些日志消息:

当我旋转显示器时,惊喜出现了:

我期待所有片段都将被恢复并再次显示(就像此日志的前 4 行所示),但我不明白,为什么所有片段都使用 savedInstanceState = null 再次创建?这是一种常见的行为,还是我做错了什么?

0 投票
2 回答
14743 浏览

android - 在哪里恢复 ViewPager 中的片段状态

精简版:

我有一个有 ViewPager 的 Activity。ViewPager 里面有三个片段。我通过实现 Parcelable 并将其存储在包中来将数据存储在片段中。

现在的问题是我在哪里恢复数据。我很困惑,因为(据我所知)每次旋转屏幕时,ViewPager 都会创建片段的新实例。(创建了一个新活动 -> 新 ViewPager -> 新片段)。如果我错了,请纠正我。

长版:

我在 MainActivity 中的 ViewPager

我的 FragmentPagerAdapter

在我的片段之一中保存状态

提前致谢!

更新:

根据发布到类似问题的其他解决方案,我还添加了setRetainInstance(true); 在我的片段的 onCreateView 中。这就是我保存和恢复状态的方式:

并在 onCreateView 中恢复

我看到两个日志都被触发了。为什么数据没有恢复?

0 投票
1 回答
1343 浏览

android - 持有 ViewPager 的 Fragment 的生命周期

我有一些让我难过的事情。我有一个片段(片段 A),它的 ViewPager 包含三个片段(用于向左/向右滑动)。因此,如果在另一个片段中,在onBackPressed()方法中,我执行getFragmentManager().popBackStack()调用,片段 A 将再次可见(带有子片段的 ViewPager),这是所需的状态。但是,对于 Fragment A 或 ViewPager 中没有任何方法表明 Fragment A/ViewPager 再次可见。

片段生命周期 ( http://developer.android.com/guide/components/fragments.html ) 中引用的任何片段方法都不应在“片段从后台堆栈返回布局”或任何方法时调用在 OnPageChangeListener 中调用(是的,我确实在 Fragment A 的 onCreateView 中调用 viewPager.setOnPageChangeListener(this))。

关于我可以在哪里看的想法?

0 投票
0 回答
242 浏览

android - 如何获得一个片段的视图高度到另一个片段?

我有 3 个标签。1 个选项卡有一个查看器。我想在 viewpager 中获取项目视图的高度,以便可以在我的选项卡中使用它。如果我尝试访问 onResume 中的片段,则视图始终为空。

选项卡的布局

视图分页器内项目的布局。我想获取从屏幕顶部到卡片视图末尾的值

0 投票
1 回答
3752 浏览

android - 何时在 Fragment 的生命周期中调用 onActivityCreated?

我在这里查看片段的生命周期,但看不到onActivityCreated被调用的位置?