- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
DialogFragment 与 BackStack 的组合让我感到困惑,也许有人可以帮助我。
据我所知,有两种常见的显示 DialogFragment 的方法。通过 show() 方法或通过事务正常添加 fragment (从本质上是 show() 在内部执行的检查)。
我遇到的问题是理解 addToBackstack() 方法在整个过程中的位置,特别是当您在调用 show() 方法之前将事务添加到后台堆栈时,如本例所示:
// DialogFragment.show() will take care of adding the fragment
// in a transaction. We also want to remove any currently showing
// dialog, so make our own transaction and take care of that here.
FragmentTransaction ft = getFragmentManager().beginTransaction();
Fragment prev = getFragmentManager().findFragmentByTag("dialog");
if (prev != null) {
ft.remove(prev);
}
ft.addToBackStack(null);
// Create and show the dialog.
DialogFragment newFragment = MyDialogFragment.newInstance(mStackLevel);
newFragment.show(ft, "dialog");
在上面的示例中,在显示新的DialogFragment之前,我们检查是否有其他可以显示的DialogFragment,我们将其删除并将此过程添加到backstack(我假设这是为了显示之前的DialogFragment,当删除了新的 DialogFragment)。之后我们通过 show() 方法显示新的 DialogFragment。但是我看不出这种方法与只调用 show() 方法有什么区别。我刚刚检查了一个测试项目,其中连续显示多个 DialogFragment,DialogFragment 的内部实现自动处理所有内容,这意味着当我触摸后退按钮时,仍然会显示前一个 DialogFragment。
那么,为什么在 DialogFragments 的上下文中使用 addToBackstack?
最佳答案
好吧,在使用 DialogFragment 解决方案编写更多代码(包括更多测试)之后,我找到了为什么要使用 addToBackStack 方法的原因(很可能是关键原因),就在删除之前的对话框之后。
这样做的原因(愚蠢的我,我错过了)是它会确保在一个时间点只有一个对话框是可见的。 show() 方法完全按照它说的去做,它“显示”了一个新的对话框 fragment ,但对任何以前的可见对话框绝对没有任何作用,所以本质上所有使用 show() 方法的对话框都将堆叠在前一个对话框的顶部.我的错误是,直到我制作了不同大小的对话框后,我才意识到这一点。如果所有对话框的大小都相同,那么最上面的对话框将隐藏所有其他对话框。
总而言之,show() 方法不会隐藏/删除屏幕上已经存在的任何对话框。如果我们想这样做,我们需要手动执行事务,这当然必须包括删除先前的对话框以及将此事务添加到返回堆栈,以便当用户按下后退按钮时,先前的对话框将重新出现.
关于android - DialogFragment与addToBackstack方法连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27189826/
在 Android 上的 FragmentTransaction 项中 docs ,说明方法replace()与调用方法remove()是一样的,对当前view中添加的所有fragment调用方法添加
我正在尝试关闭 fragment 并希望通过在我的 fragment 实现中使用 addToBackStack 来恢复主要 Activity ,但它不起作用。后退按钮正在关闭应用程序。 我使用的 fr
在我的应用程序中,我正在处理一个显示不同 fragment 的 Activity 。该 Activity 还具有抽屉布局。 activity_main.xml: 所以现在我试图通过替换它们
我就是不明白。 我有一个 Activity A、一个 Fragment F1 和一个 Fragment F2。当 Activity 启动时,它会通过 F1 打开 getFragmentManager(
我的 MainActivity 管理两个一起工作的 fragment 。我的方法之一是我的 ListFragment 上的监听器接口(interface),MainActivity 负责切换 frag
这是负责将 fragment 添加到后台堆栈的函数: public void populateContent(File f) { ContentFragment cf = new Conten
有什么办法可以让这个更干净一点吗?我知道当 query = ""时我位于主菜单,因此返回应该关闭应用程序。 if (query == "") { fragmen
当我们在 fragment 中使用 addToBackStack() 时如何设置动画? 我的旧片段需要保留,新片段应该将旧片段与动画重叠并显示给用户。 我尝试了 setCustomAnimation(
按后退按钮后,单击按钮时显示的新 fragment 不会关闭,而是关闭整个应用程序。该按钮位于三个选项卡之一内。 mainActivity.java、HeroesFragment(具有三个选项卡的 f
我被它弄糊涂了。 我有一个 Activity A,Fragment F1 和 F2,当单击一个按钮时,我想隐藏 F1 并将 F2 添加到同一位置,然后可以通过后退按钮返回到 F1。所以我做了如下。
这是我的主要 Activity 。我关注了this guide关于 fragment 正确。当我单击“后退”按钮时,我的应用程序关闭而不是返回到 MainScreenFragment。为什么会发生这种
我有一个 FragmentActivity,它在启动时加载一个自定义 ListFragment,并在单击某项后用新 fragment 替换它。 在 fragment Activity 子类中: pub
每当我按下我的应用程序的后退按钮时,就会发生以下情况。 原创手机展示:FragA 点击 FragA 上的 View 后手机展示:FragB 点击返回按钮后手机显示: fragment A fragme
我正在研究 Fragments,在区分 FragmentTransaction.replace(id, fragment, tag) 和 FragmentTransaction.addToBackSt
当我按下“后退”按钮(在模拟器和 Galaxy S2 上测试)时,无论提交了多少 fragment 事务,应用程序都会关闭:( 好吧,以防万一,我会发布我的 fragment 事务的实现,尽管我怀疑它
我的应用程序有选项卡,在一个选项卡中,我有一个带有 ListView 的 fragment 。单击列表中的项目时,我尝试使用以下内容在该选项卡下初始化一个新 fragment : private cl
我在使用 FragmentTransaction addToBackStack 时发现了一个奇怪的行为。每当手机旋转时,它都会重新创建堆栈中的所有 fragment 。为什么要重新创建这些 fragm
我在抽屉导航 Activity 中创建了一个选项卡式 Activity 。我已将抽屉导航内的列表与各个 fragment 链接起来。我还在 ft.commit() 之前使用了命令 ft.addToBa
我没有找到解决问题的方法。 我有几个 fragment (动态创建),但我的后退按钮根本不起作用,按下它将关闭应用程序,无论 fragment 是“Activity 的”。 @Override pub
具有添加 fragment 和稍后的 replace() fragment 的流程。所有 fragment 都是动态添加的,但不是所有 fragment 都调用addToBackStack()。 ge
我是一名优秀的程序员,十分优秀!