问题标签 [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.
android - 离开深度嵌套的堆栈时,这是清理 Fragment 后堆栈的正确方法吗?
我正在使用 Android 兼容性库来实现片段并扩展了布局示例,以便片段包含一个触发另一个片段的按钮。
在左侧的选择窗格中,我有 5 个可选项目 - A B C D E
。
FragmentTransaction:replace
每个都在详细信息窗格中加载一个片段(通过) -a b c d e
现在我已经扩展了片段e
以包含一个按钮,该按钮e1
也可以在详细信息窗格中加载另一个片段。我在 fragmente
的 onClick 方法上这样做了,如下所示:
如果我做出以下选择:
然后片段e
位于详细信息窗格中。这很好,我想要什么。但是,如果我此时back
按下按钮,它什么也不做。我必须单击它两次,因为e1
它仍在堆栈上。此外,在单击后,我在 onCreateView 中得到了一个空指针异常:
为了“解决”这个问题,我在A B C D E
选择时添加了以下内容:
只是想知道这是否是正确的解决方案,或者我是否应该做一些不同的事情?
android - Android - 后退按钮和片段后台堆栈不起作用
我正在开发一个带有单个 FragmentActivity 的简单的基于片段的应用程序。应用程序的每个“屏幕”都包含在一个片段中,所有片段都在应用程序启动时添加到容器布局中。
转换是通过隐藏当前可见的片段,然后显示适当的片段来完成的。
这一切都很好,但是当按下后退按钮时,应用程序退出,无论哪个屏幕可见或之前的哪些事务已添加到后退堆栈。
我已经检查以确保后台堆栈正确累积记录并尝试了许多不同的转换方法变体,例如替换片段而不是隐藏/显示它们,创建片段的新实例而不是将它们存储在变量中等。据我所知,我的代码与我能找到的所有教程和示例相匹配,我什至无法找到任何类似的问题/类似问题的示例,大概是因为标准实现对其他人“有效”。
我怀疑这可能是应用程序级别的问题,例如我的清单中的一个属性(我已经对此进行了非常彻底的调查)或者我的应用程序设置方式固有的问题,它阻止了后退按钮正常工作。我可以重写 onBackPressed 来手动处理转换,但这似乎是一个非常难看的解决方法。关于为什么这可能没有按预期运行的任何想法?顺便说一句,这是在运行 Jelly Bean 的 Nexus 7 上。
android - 如何从当前 Fragment 恢复最后一个 ListFragment
我的应用程序具有这样的结构
MainActivity扩展 ActionBarActivity -- 按下按钮时 --> ListFragment --按下列表项-->片段
在 Fragment中并且如果按下返回键,它会直接转到MainActivity 。我如何让它去 ListFragment
以下是我期望它做的事情
片段*----按下后退键--> *ListFragment --按下后退键 ---> MainActivity扩展 ActionBarActivity
以下代码是我在 mainactivity 和 listfragment 中用来启动任何片段的代码
更新
现在我已将以下代码添加到我的 MainActivity
And following code to my listfragment
Now when I press the backbutton on my list fragment or fragment it doesnt go back
android - putFragment() - Fragment x 当前不在 FragmentManager 中
上面的标题被问了很多,但答案似乎FragmentStatePagerAdapter
与我的问题无关。我putFragment(Bundle, String, Fragment)
直接用这个方法。
Android文档putFragment(Bundle, String, Fragment)
说:
但是,以下代码会引发异常:
我使用上面的原因是 ContentFragment 和 ActionBar 片段都可以使用结果getArguments()
来找到它们的相反数,即使它们当前不在后台堆栈的顶部 - 例如如果它们被透明部分遮挡堆栈中较高的片段。
但是,我得到了例外:
我可以由此得出结论,commit()
只是将事务放在堆栈上以在 UI 线程上完成,并且在putFragment()
执行该事务之前发生调用?还是我误解了什么?(Android 网站上的文档没有说明我认为应该处于的片段的先决条件)。
值得注意的是,commit()
这就是为什么我认为呼叫发生得太早的原因 - 一个可能的答案是如何将侦听器附加到事务以在它被commit()
编辑时通知您。我只是不认为这存在...
安排此事务的提交。提交不会立即发生;它将被安排在主线程上的工作,以便在该线程下一次准备好时完成。
编辑
commit()
通过使用糟糕的解决方案确认这是问题所在:
真正的解决方案仍然非常感谢。
android - 将片段的状态保存在后台堆栈中
我的问题一般在这个问题中描述: 一劳永逸,如何正确地将片段的实例状态保存在后台堆栈中?
但我不明白接受的答案与它有什么关系。
为了简短起见:
有2个片段A和B。
我使用 transaction.replace() 从 A 转到 B 并将事务添加到 backstack。
我旋转屏幕 - > 片段 A 不可见,但它的 onSaveInstanceState 被调用 - 到目前为止一切正常。
我再次旋转屏幕。再次调用 A 的 onSaveInstanceState,但现在它的视图不存在,所以我无法保存它的状态。
正如公认的答案所暗示的,使用 getFragment/putFragment 的目的是什么?当我的片段在后台堆栈中时,我想保持对它的引用是没有意义的。谢谢。
android - 如何将视图添加到后台堆栈(android)?
我目前正在使用新的材料设计原则构建一个应用程序。在应用程序中,当用户单击列表视图项时,面板会从屏幕底部向上滑动,并包含一个片段。我的问题是,当面板展开时,用户单击后退按钮,应用程序关闭,而不是面板向下滑动。当用户单击列表视图行时,不会启动新的活动或片段,因此我不确定如何使其正常工作。
我需要做的是,当用户单击 listview 行时,面板会展开,然后当用户单击后退按钮时,会调用一个方法来关闭面板(当前按下后退按钮会关闭应用程序)。
如果有人可以解释我如何向后台堆栈添加视图更改,或者如何获得所需的行为,我将不胜感激。
谢谢科里:)
android - 具有自定义 backstack 层次结构的片段导航
我需要在我的应用程序的某个时刻创建一个特定的行为。我使用导航抽屉并替换框架布局中的片段。
假设我在后台堆栈中有一些片段:A -> B -> C。A
是我的应用程序中的根片段之一,如果在 A 上按下后退按钮,则应用程序退出。
当我在 C 上(A 和 B 在后台)时,我想去 E 和 D 在后台。这意味着如果我按下 E 上的后退按钮,我想转到 D(D 是我的应用程序中的另一个根片段,如果我按下 D 上的后退按钮应用程序退出)。
现在我清除返回堆栈,然后用 D 替换当前片段,然后用
E正确的?)
android - 向上插入符号显示导航抽屉
没什么好说的了。我正在使用单个活动,然后进入一个调用setDisplayHomeAsUpEnabled(Boolean.TRUE)
和setHasOptionsMenu(Boolean.TRUE)
. 菜单有两个项目,与它们的交互是正确的。我已经在所有onOptionsItemSelected
应用程序(包括活动、片段和抽屉切换)上设置了断点,但是当我调试时,菜单打开并且没有触发断点。
活动和片段代码以防万一他们有帮助:
片段代码:
android - 进行片段交易的正确方法
我正在开发具有一个活动和多个片段的 android 应用程序。我的应用程序包含导航抽屉。它的布局包含列表视图。单击它的项目我会动态更改片段ft.replace(R.id.my_placehodler, new MyFragment())
并将事务添加到backstack ft.addToBackstack(null)
. 当我每次实例化新片段时进行新事务时。在我看来,这不是一个好方法。你能给我一些关于进行片段交易的正确方法的建议吗?
android - Backstack android片段导航
这就是我使用导航抽屉显示片段的方式:
假设如果用户导航到Fragment 2-> Fragment 5-> Fragment3.
如果用户单击back button
我需要descending order
在每个片段上显示 和name
,当他转到该特定片段时,我将显示片段,fragment
即:
Fragment 3-> Fragment 5-> Fragment2.
这是我尝试过的:
第一种方法:
第二种方法:
我无法让这个工作**(即..我无法将它移回我来自的片段**)并且无法根据后台堆栈显示片段的名称
任何帮助是极大的赞赏。