问题标签 [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 投票
1 回答
961 浏览

android - popBackStack 时预加载一个片段

我对 backstack 行为有疑问。这就是我正在做的事情:

怎么了:

  • Fragment 1 被添加并在 backstack 中
  • 然后第二个片段替换第一个片段并将其添加到后台堆栈。

现在我想用一个新的事务来改变我的最后一个 backstacked 片段,该事务放置一个新的 backstack 片段,所以:

但是这个由 apopBackStack + replace进行的事务是frag1通过调用它的onCreateViewand来加载的onActivityCreated。我知道这是预期的行为,因为这是 backstack 的工作方式,但我试图找到一种方法来避免这种预加载。

编辑

在这个问题中,我使用 backstack 片段的概念来使交易更加清晰。这里的每笔交易都是一个添加+删除(这是一个替换)。我正在使用的替换代码是:

你可以看到我正在创建基于片段 backstack 的导航历史,因为它是一种浏览器。当添加一个“页面”时,会有一个片段和一个 backstack 事务。在这种情况下,我试图:

  • 删除当前片段。
  • 从 backstack 中删除事务。
  • 添加一个新的片段,而不弹出和加载前一个 backstack 片段。

我希望它更清楚。

编辑 2

我已经为支持此行为的标志填写了请求功能。在这里找到它。

0 投票
3 回答
16331 浏览

android - 带有片段/工具栏的后退导航

我现在正在用这个挠头....我有一个ActionBarActivity加载初始Fragment的 - 原始菜单在活动中膨胀。Now, I have a navigation bar that, when an item is selected, loads a different fragment and adds this to the backstack.

当我这样做时,我想设置几件事:

  1. 将家设置为向上指示器
  2. 使主活动中的选项菜单无效
  3. Set 有片段的选项为 true
  4. 确保向上指示器正确导航回原始片段

发生了一些相当奇怪的事情 - 向上指示器只出现一次并且不作为后退按钮,虽然我已经使新菜单无效并膨胀,但新菜单会附加到原始活动菜单。

编辑:menu.clear()好的,我已经解决了附加问题 - 忘记添加onCreateOptionsMenu方法。

我的导航抽屉布局具有onClick所有菜单项的方法,这些方法会触发另一个片段的加载:

切换首页:

一旦项目被触发,将onCreate包含无效和 hasOptions 代码:

然后onCreateOptionsMenu扩展另一个菜单布局(包含一个称为设置的项目)。

如前所述,这只能部分工作一次——我第一次使用该项目加载片段时,我得到了后退图标,但它也不起作用(这是onOptionsItemSelected为了检查主页项目按下而设置的——它什么也不做)。当我按下后退按钮时,它会将我带回正确的位置。但是,如果我向后导航,即使代码运行,后退箭头现在也会显示更长的时间onCreate

0 投票
1 回答
938 浏览

android - 从后台堆栈重新创建片段时未调用处理 onResume()

我最近开始通过用片段替换“所有”活动来重构我的 Android 应用程序。在现在的状态下,它的表现比以前差了很多……

我的问题在于“向上导航”、回栈行为和将片段放在前面时对片段的一般“重新绘制”。

所以我在我的用户界面中创建了一个逻辑层次的片段,当用户在主菜单中时,不应该显示“向上”按钮。当用户在任何其他片段中时,向上按钮应将用户带回主菜单。

当我开始实现这个时,我只是放了一个

在我的片段的 onResume 方法中。这将按预期工作,直到主菜单从后堆栈(或主页导航)移到前面。然后不调用 onResume() 方法。

当用户在应用程序的其他地方时想要“重新绘制”片段似乎是大部分开发人员想要做的事情。我已经阅读了一些解决方案,基本上包括监听 backstack 更改,然后为即将返回的片段调用 onResume()。这个解决方案感觉就像一个丑陋的黑客,你不应该在真正的应用程序中拥有。那么大型应用程序的开发人员如何处理这个问题呢?最佳做法是什么?还是我错过了一些原则,说明如何根本不将自己编码到这个角落?

我必须说,我认为 Fragment 的 Android 开发页面几乎是在说生命周期:

“管理片段的生命周期很像管理活动的生命周期”

“已恢复:片段在正在运行的活动中可见。”

此信息意味着当片段从不可见变为可见时应调用 onResume()。

另外,我提供导航的解决方案显然不正确,关于如何获得正确行为的任何提示?

谢谢你的帮助!

0 投票
2 回答
247 浏览

android - 使用 ActionBarActivity 和 getSupportFragmentManager 时 BackStack 损坏

我的应用程序中有以下工作流程:

Activity 1(一个 ListView)-> Activity 2(一个加载 Fragment 的 ListView)-> Fragment 1 -> Fragment 2。

一切都很顺利,我可以前进到片段 2,然后按“后退”按钮向后遍历每一步。

在某些时候,我需要添加一个 ActionBar。由于代表谷歌进行了一些奇怪的编程,我必须扩展导入 android.support.v7.app.ActionBarActivity 的 ActionBarActivity,这需要我将所有片段管理器更改为“支持”导入 android.support.v4.app。片段管理器。

结果,我在整个工作流程中都有一个 ActionBar,但我只能前进到 Fragment 2。任何按 Back 按钮,都会导致 Activity 1 出现,没有 BackStack。

那么,是否不可能使用带有 ActionBar 和 BackStack 的动作/片段,或者我的 BackStack 是否因其他原因而损坏?

任何帮助,将不胜感激。

谢谢!

0 投票
3 回答
804 浏览

android - 带有嵌套/子片段的 Android Backstack

我对嵌套片段的回栈方式有疑问,非常感谢提供的任何帮助。

我有片段 A 和片段 B。片段 A 包含另一个片段(ButtonFragment)。在 Activity 的 onCreate 中,我加载了 Fragment A,然后切换到 Fragment B。当我回到 Fragment A(退出后台堆栈)时,出现以下错误。

异常调度完成信号。

E/MessageQueue-JNI(6330):MessageQueue 回调中的异常:handleReceiveCallback

E/MessageQueue-JNI(6330): android.view.InflateException: Binary XML file line #16: Error inflating class fragment

...

原因:java.lang.IllegalArgumentException:二进制 XML 文件第 16 行:重复 id 0x7f080000、标签 null 或父 id 0x0 与 com.example.fragmentnavigation.MainActivity$ButtonFragment 的另一个片段

没有子片段,导航工作。也许我必须添加一些 ChildFragmentManager 处理,但我不知道什么和在哪里。我希望你能帮助我。

主布局

片段 A 布局

主要活动

片段 A

按钮片段


解决方案特别感谢@arun-kumar

关于片段的一个非常好的概述 https://github.com/codepath/android_guides/wiki/Creating-and-Using-Fragments

片段 A 布局

片段 A 的 onCreate

0 投票
2 回答
971 浏览

android - 后按后更新导航抽屉

我正在Android用 a 实现一个应用程序,但Navigation Drawer我遇到了问题。

我从 Android Studio 中的模板(带有导航抽屉的 Android 应用程序)开始,并在其中添加了一个新部分 - 设置。当点击设置按钮时,用户会被带到一个新的活动,用户可以通过按下操作栏中的“向上”按钮(效果很好)或按下物理后退按钮来返回。那部分效果不太好。

当按下“向上”按钮然后打开导航栏时,我的主页会突出显示(选中)。但是当使用返回按钮并打开导航抽屉时,设置项被选中,就好像用户正在查看该页面而不是主页一样。

所以这是因为导航抽屉片段没有更新,我还没有找到解决这个问题的任何方法。我想要的是重新创建导航抽屉(这是我认为按下“向上”按钮时会发生的情况)。你知道我怎样才能做到这一点吗?

我开始研究基于此的解决方案:

但我不知道在那里写什么会更新整个 UI。(通过调用 onCreate() 进行了实验,但它太丑了,不可能是正确的方法)。

有什么建议么?

更新:

从另一个活动按 BACK 时不会发送 onBackStackChanged 事件。仅适用于当前活动中的片段。

0 投票
3 回答
284 浏览

android - 片段回栈,android?

我的活动由导航抽屉组成,目前在左侧菜单中有 5 个选项。这一切都在片段中打开。

我正在寻找一种方法来保留所有片段的堆栈,以便当用户按下后退按钮时,他会移动到上一个片段。

Like-Activity 由抽屉菜单组成,该菜单有 5 个选项 menu1、menu2、menu3、menu4、menu5,具有相应的片段 F1、F2、F3、F4、F5。

用户按下menu1,他被转发到F1 然后按下menu2,然后按下menu4。

当用户在 F4 并且他按下后,他应该被移动到 F2 而不是退出活动或应用程序。

它如何实现以及首选示例或示例代码。

我目前使用此代码,但它并没有帮助我

0 投票
2 回答
90493 浏览

android - FragmentManager 和 FragmentTransaction 到底是做什么的?

我在下面有简单的代码

这些代码行有什么作用?

0 投票
1 回答
58 浏览

android - 循环片段回栈

我的应用中有 5 个片段。我使用后台堆栈。当我打开片段时,他添加到后台堆栈。

[片段1]->[片段2]->[片段3]->[片段4]->[片段5]

当我点击后退按钮时,我需要循环打开 2 个最新的片段。

[片段4]->[片段5]->[片段4]->[片段5]->[片段4]->[片段5]

可能吗?

0 投票
1 回答
195 浏览

android - Android ViewPager Fragment - 维护状态

我有一个由 FragmentStatePagerAdapter 支持的 ViewPager。该应用程序是单个 Activity 应用程序,每个“页面”都有片段。目前我正在使用 ViewPager 显示产品类别,每个类别将包含一个列出所有产品的 ListView(或 RecyclerView)。一旦用户点击产品,viewpager 片段就会被 ProductDetailsFragment 替换。这一切都很好,但当用户按下时,它会重新加载所有类别片段。有没有办法避免这种情况?问题是,如果用户必须分页超过 3 页,他们会希望保持滚动状态。