问题标签 [fragment-backstack]

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 投票
2 回答
329 浏览

android - 来自通知的 Android Activity - FragmentManager 后台堆栈为零

我四处寻找,但找不到答案。我的应用是基于片段的,MainActivity是入口点。当用户单击通知时,我会触发所需的行为,PendingIntent其中包含关于需要调用哪个片段的特定标志。

当我需要的片段已经显示时,就会出现我的问题。通过MainActivity输入 时PendingIntentfragmentManager.getBackStackEntryCount()将返回零。我猜这是因为该活动与我已经运行的实例不同。然后再次调用相同的片段,这会弄乱我的 UI(并且可能会因为Otto总线已经注册而崩溃)。

我的问题是:当从通知触发活动时,检测正在运行的应用程序状态(即正在显示哪个片段)的最佳方法是什么?谢谢。

0 投票
1 回答
43 浏览

android - 在支持屏幕旋转的同时,我应该如何添加我的初始片段?

fragment1当我的应用程序启动时,我在事务中将片段实例(例如,newInstance(List<Obj>)这个片段显示了一些通过静态方法传递给它的缓存数据。在onSaveInstanceState()我保存数据时,如果重新创建片段,我可以显示它。

现在假设我不重新创建片段。假设我用第二个片段替换它,比如说,fragment2(这次将事务添加到后台堆栈),执行两次屏幕旋转,然后按回。该应用程序将弹出返回堆栈并尝试fragment1再次显示,然后将尝试显示List<Obj>哪个将nullNullPointerException抛出。

我知道这是因为该fragment1实例从未被保存过,因为它不在后台堆栈中,并且在设备旋转时也没有显示。

我的问题是,在这种情况下支持屏幕旋转的最合适的方式是什么?我可以将初始事务保存在后端堆栈中,并在弹出后端堆栈之前onBackPressed()验证这一点getSupportFragmentManager().getBackStackEntryCount() >= 1(我不希望弹出初始事务,因为这fragment1是我的初始屏幕),但我认为这不是正确的方法。有任何想法吗?

0 投票
2 回答
321 浏览

android - 片段 onResume() 和 backStack 问题

当我从另一个片段回来时,我无法恢复我的片段。

设想 :

我有一个Fragment A. 现在我正在打开多个片段,其中Fragment A说:A1, A2, A3 ...使用框架布局。

现在我正在Fragment B从 A1/A2/A3 之一启动一个新的片段说...

我正在执行一些操作Fragment B,现在当我弹出我的Fragment B然后我无法获得 onResume()Fragment A

只需要在我回来时获取 onResume()Fragment B

需要任何帮助!

高度赞赏!

谢谢。

0 投票
1 回答
1465 浏览

android - 如何在片段中保存列表视图项/适配器并从后堆栈恢复

我一直试图搜索这个问题,但我找不到任何解决方案。我在片段中保存 ListView 项目时遇到问题。情况是我有几个片段

假设 FRAGMENT A、FRAGMENT B 和 FRAGMENT C,并且 FRAGMENT A 有一个列表视图,列表视图的项目可以在用户滚动时更改(就像社交媒体应用程序中的时间线一样)。当我更改片段 A 时,我使用了 addToBackStack(null) 方法。

问题是,如果按下后退按钮,如何保存列表视图并恢复其?

onSaveInstanceState() 永远不会被调用,因为 Activity 主机永远不会被杀死,只使用以下方法更改片段:

这是我尝试保存和恢复列表视图的代码:

这是我到目前为止所做的代码:

我希望有人可以帮助我,谢谢。

更新的代码 这是我目前的代码,当我尝试保存列表视图项及其适配器时它可以工作,也许这有点棘手。如果有人有任何想法,将不胜感激。

0 投票
3 回答
4407 浏览

android - 处理导航抽屉中的片段回栈

好吧,我知道还有其他问题乍一看会让这个问题看起来像重复,但这些答案都不适用于我的情况,

我想要的是第一个片段显示为关于后退按钮如何工作的主活动,我需要从导航抽屉中选择的任何片段在按下后退按钮时返回到第一个片段然后用户会再次按下该应用程序即可退出该应用程序。

所以我尝试使用 addToBackStack ,当我移动到另一个片段时,如果我按下后退按钮,它会回到我的第一个片段(完全按照我的意愿)但是再次按下后退按钮会让我看到白屏(我想知道这是否是由于到我使用下面包含的交易动画)所以为了解决这个问题,我尝试覆盖后退按钮并调用完成();但这会导致即时消息中的任何片段完成而不是返回到第一个片段,我从上述链接和许多其他链接中尝试了一些解决方法,但找不到合适的修复任何建议?

这是我的主要活动 displayView

我发现这看起来是一个很好的解决方法

但我对 android 还是很陌生,我不确定将 INITIAL_POSITION 设置为什么,我试过了

但没有任何运气

0 投票
1 回答
855 浏览

android - backstack 上的所有片段,在旋转后在 onSaveInstanceState 中有空值

旋转设备后,我们在 backstack 或 fragmentSupportManager 中的任何片段都会激活 onSaveInstanceState。

但是,在第一次旋转之后,里面的所有内容都是空的(所有变量),应用程序崩溃并出现空指针异常。

我想知道为什么如果片段实际上被破坏为空(所有值都为空),为什么片段仍然存在并且 onSaveInstanceState 被调用?

我的代码很深,有多个基类和演示者类,可以从片段中提取大量代码。我也只使用一个 Activity 并使用 fragmentTransaction.replace。

如果人们需要,我可以添加代码,但是有很多!我希望关于 backstack 的工作方式/保留它的片段的方式有一些明显的或我不理解的东西。

我看过的没有帮助的链接是

onSaveInstanceState 会在后栈中的 Fragment 上被调用吗?
一劳永逸,如何正确地将 Fragments 的实例状态保存在后堆栈中?
将 onSaveInstanceState 与 backstack 中的片段一起使用?
BackStack Fragments 旋转时为空白
将片段的状态保存在 backstack 中

0 投票
2 回答
1200 浏览

android - maintaining a Back stack for fragments as well as confirm on exit

I am actually working on fragments instead of activities .So on navigation drawer item click different fragments appear on the screen.Based on my code, if i am moving from Activity A to fragment b,then fragment c,again to b,then if i will click back button,then it will navigate me to the MainActivity A.But here is the problem.when i want to add confirm on exit dialog box on the MainActivity onBackPress(),it appears every time i click the back button regardless of which page is open,But i want it to appear only when there is no fragments left in the back stack.I need some help on that issue.

0 投票
0 回答
42 浏览

android - 片段 backStack 无法正常工作

在我的应用程序中,我有一个导航抽屉。HomeActivity 包含导航抽屉。在 HomeActivity 中,我正在调用一个片段,说 AI 希望这个片段保留在后台堆栈中。然后当用户从导航菜单中选择不应该的任何其他选项时记录到后台堆栈中。但是使用我的代码,它仍保留在后台堆栈中。请帮帮我

代码

来自 HomeActivity 的代码以启动片段 A

用户从导航抽屉中选择时的代码

0 投票
2 回答
943 浏览

android - 使用 Navigation Drawer 时,backstack 中只有一个 Fragment

我正在使用导航抽屉。因此,当我的应用程序启动时,我正在调用 homeFragment 并将其保存在后台堆栈中。现在,如果用户从导航抽屉中选择任何选项,我将打开相应的片段,但不将它们添加到后台堆栈。所以我想要的是,即使用户打开了 10 个片段,在按下后它们也应该只被带回 homeFragment。但是使用我的代码,即使 homeFragment 在后台堆栈中,应用程序也会在按下后退出。

打开片段的代码

来自 MainActivity

在 NavigationDrawer 项目上单击

0 投票
0 回答
1270 浏览

android - 如何正确清除 Fragment BackStack?

我有一个应用程序,它有一个活动,所有屏幕都显示为片段。

因此,当我大多数时候更改片段时,我会将其添加到后堆栈中。所以 BackStack 可以变得相当大。

我的问题是,如果我想替换一个片段但不再保留 BackStack(BackStack Reset),一种选择是通过执行 PopBackStack 直到 root 来清除 BackStack(这是超级低效的并且已经看到其他问题)或者做一个片段替换而不将其添加到 BackStack

那么你推荐什么?如果我只使用 replace ,它是否有任何内存问题?