- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我正在研究 Fragments,在区分 FragmentTransaction.replace(id, fragment, tag)
和 FragmentTransaction.addToBackStack(tag)
调用时有点困惑。假设我当前的 fragment 是 FragmentA,然后我加载了 FragmentB。我希望将来,当我需要加载 FragmentA 时,我不必重新加载它。只需加载旧状态的旧版本。我使用了以下代码段:
public void loadFragment(Fragment fragmentB, String tag) {
FragmentManager fm = getSupportFragmentManager();
View fragmentContainer = findViewById(R.id.fragment_container);
FragmentTransaction ft = fm.beginTransaction();
ft.replace(fragmentContainer.getId(), fragmentB, tag);
ft.addToBackStack(tag);
ft.commit();
}
现在我很困惑,我应该在哪里添加字符串标签?在 replace()
或 addToBackStack()
中还是在两个调用中?你能解释一下这两个标签位置的区别吗?
最佳答案
Can you explain the difference between these two tag places?
addToBackStack
的文档很清楚:
An optional name for this back stack state, or null.
而对于 replace
:
Optional tag name for the fragment, to later retrieve the fragment with FragmentManager.findFragmentByTag(String).
所以这两个参数是独立的,一个标识back stack,另一个标识Activity的FragmentManager
中的fragment。
从这个角度来看,您的代码似乎是正确的,只是我不会通过它的 id 搜索 fragmentContainer
View ,而只是使用它的 id 来替换 fragment 。让它更简单:
public void loadFragment(Fragment fragmentB, String tag) {
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.fragment_container, fragmentB, tag);
ft.addToBackStack(null);
ft.commit();
}
如果您以后不需要识别此返回堆栈,请将 null 传递给 addToBackStack
。至少我一直在这样做。
关于Android FragmentTransaction.addToBackStack 混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14460109/
当我使用 fragment “replace”时,新的共享元素转换可以工作,但我似乎无法让它工作 fragment “add”。在这两种情况下,我都使用相同的容器。 更多详情: Activity -布
我已经知道的是: 在fragmentTransaction.replace()之后,会调用当前fragment的onStop()函数而 fragmentTransaction.add() 不会。 在调
我正在使用 fragment ,在我的应用程序中显示两个屏幕。每个 Fragment 都有自己的一组操作栏按钮菜单布局。 在使用 FragmentTransaction replace() 方法提交
当我回顾一个项目的旧代码时,我意识到整个项目都在使用 FragmentTransaction.replace 而不是 FragmentTransaction.add。 public class Upg
我一直在我的一个项目中使用 FragmentTransaction 来设置初始 fragment //Set the fragment initially MainFragment fragment
我的 add() 方法遇到问题,该方法无法读取参数它无法将我的 BlankFragment 类作为 fragment 读取,而是读取包名称,后跟类名称(即我的代码) package com.examp
我不会替换我的 fragment ,但我有一个问题,当我在 beginTransaction() 之后调用 replace 时,Android Studio 不会给出错误。 FragmentManag
我想创建一个类,它的功能只是做一个 fragmentTransaction,但我有一个错误。下一个是我的课: package net.elinformaticoenganchado.sergio.cr
在我的应用中,我有一个 ListFragment: Fragment fragment = new MyFragment(); FragmentManager fragmentManager = g
我的 Android 代码有一个非常奇怪的行为。 真正的问题在代码之后。 我想要做的是拥有一个应用程序,该应用程序只能在手机上以纵向模式运行,而在平板电脑上可以同时以纵向和横向模式运行。为此,我在不同
我在替换 FrameLayout 容器内的 fragment 时遇到了错误。当应用程序第一次启动时一切正常,但是当我隐藏应用程序然后恢复它时,当调用 FragmentTransaction.repla
我有加载器 fragment ,并且正在从加载器 fragment 调用另一个 fragment 。一切正常,但突然我的 fragment 加载器给我一个错误。在加载器 fragment 中,我显示进
我已经在 stackoverflow 上搜索过这个问题并找到了这两个解决方案: Replacing a fragment with another fragment inside activity g
我正在学习 fragment ,下面给出的是我的第一个 fragment 程序。一个简单的项目,我有 2 个屏幕。当我单击第一个屏幕的下一步按钮时,需要显示第二个按钮。 我的目标是 Android 2
为什么我的 fragment 不能添加到后台堆栈? @Override public void onTabSelected(Tab tab, android.app.FragmentTrans
我在 FragmentStatePagedAdapter 中使用 Tabs。下面的代码来自 onOptionsItemSelected(MenuItem item) 方法: case R.id.men
我在一个 Activity 中有三个 fragment ,并在 Activity 中处理了反压。在一个 fragment 中 back press (CallingFragment) 它加载 Dial
我在一个选项卡中将一堆 FragmentTransactions 添加到后堆栈中,并且当用户选择不同的选项卡时,我想将它们全部从后堆栈中清除。我找不到从后台堆栈中清除东西的方法,只有将它们弹出的方法,
我正在构建一个平板电脑应用。在这个应用程序中,有一个带有两个 fragment 的 Activity 。第一个 fragment 是“已知”列表 fragment ,它显示来自数据库查询的简单单项布局
我的错误: java.lang.IllegalStateException: 已调用提交 我的代码: final FragmentTransaction fragmentTransaction =ge
我是一名优秀的程序员,十分优秀!