Android 带null参数的addToBackStack的含义是什么?
我有客户代码。所有片段只有一个活动,即单个活动管理所有片段 此活动包含该片段的方法端的任何片段的以下代码- 例如-fragment-MoreFragment: 所以 1)Android 带null参数的addToBackStack的含义是什么?,android,android-fragments,Android,Android Fragments,我有客户代码。所有片段只有一个活动,即单个活动管理所有片段 此活动包含该片段的方法端的任何片段的以下代码- 例如-fragment-MoreFragment: 所以 1) addToBackStack(null)后跟一个commit(),这是什么意思 2) 为什么需要将空参数传递给addToBackStack 3) 这样添加后,如何获得该片段 似乎这段代码没有用,因为我运行代码时没有最后一行.addToBackStack(null).commit(),而且运行时没有任何问题 addToBackS
addToBackStack(null)
后跟一个commit()
,这是什么意思
2) 为什么需要将空参数传递给addToBackStack
3) 这样添加后,如何获得该片段
似乎这段代码没有用,因为我运行代码时没有最后一行.addToBackStack(null).commit()
,而且运行时没有任何问题
addToBackStack(null)后跟commit()的含义是什么
报价文件:
通过调用addToBackStack(),替换事务将保存到
返回堆栈,以便用户可以反转事务并返回
上一个片段,按后退按钮
如果向事务添加多个更改(例如另一个add()
或remove())并调用addToBackStack(),然后应用所有更改
在调用commit()之前,将其作为单个
事务和后退按钮将一起反转它们
向FragmentTransaction添加更改的顺序无关紧要,除非:
您必须最后调用commit()
。如果要将多个片段添加到同一容器中,则添加它们的顺序将决定它们在视图层次结构中的显示顺序
所以你必须在最后做出承诺
为什么需要向addToBackStack传递null参数
它不需要为null,可以是字符串。如果不需要,只需传递null
公共抽象碎片事务addToBackStack(字符串名称)
在API级别11中添加
将此事务添加到后堆栈。这意味着事务将在提交后被记住,并在稍后从堆栈弹出时反转其操作
参数
命名此后堆栈状态的可选名称,或null
关于:
似乎这段代码是无用的,因为我运行的代码没有最后一个
addToBackStack(null).commit()并且它运行时没有任何问题
如果您想导航到上一个片段,请将其添加到backstack。因此,这取决于是否要将片段添加到backbackback
这样添加后,如何获得该片段
您已经拥有片段实例firstFragment
。所以我不知道你说的稍后获取碎片是什么意思
更多信息@
您的答案不推荐使用。如果不想将片段添加到后堆栈,则应使用以下代码片段:
public static void replaceFragment (@NonNull FragmentManager fragmentManager,
@NonNull Fragment fragment, int frameId){
checkNotNull(fragmentManager);
checkNotNull(fragment);
FragmentTransaction transaction = fragmentManager.beginTransaction();
transaction.replace(frameId, fragment);
transaction.disallowAddToBackStack(); // <-- This makes magic!
transaction.commit();
}
addToBackStack(string name)
中的标记
字符串提供了一种方法来定位后堆栈,以便以后直接弹出到该位置。这意味着要在方法popToBackStack(字符串名称,int标志)
中使用:
从管理器的片段堆栈中弹出最后一个片段转换。此函数是异步的——它将请求排入pop队列,但在应用程序返回其事件循环之前,不会执行该操作
名称:如果非空,则为要查找的前一个返回状态的名称;如果找到,将弹出该状态之前的所有状态。POP_BACK_STACK_INCLUSIVE标志可用于控制命名状态本身是否弹出。如果为null,则仅弹出顶部状态
标志:0或POP_BACK_STACK_(包括)中的任意一个
换句话说,它将弹出后堆栈,直到在addToBackStack(String name)
中找到由name
添加的片段
例如,如果您对名为“frag1”、“frag2”、“frag3”、“frag4”的片段管理器进行了一系列的添加或替换,然后希望直接返回到使用addToBackStack(“frag2”)添加的片段2,则调用popToBackStack(“frag2”,0)
所以
- 使用
:如果您想稍后.addToBackStack(“fragName”)
弹出多个后台堆栈popToBackStack(字符串名称,int标志)
- 使用
:如果不希望以后弹出多个后台堆栈,但仍然希望一次弹出一个。即使不显式调用popToBackStack(),而是让back-press默认实现处理后堆栈,也要这样做.addToBackStack(null)
- 使用
:如果不想使用back,请直接按下或调用popBackStack()。它将确保代码的任何部分都没有使用.addToBackStack().disallowedtobackstack()
getFragmentManager().popBackStackImmediate()
如果“后退”按钮可以在有/无参数传递的情况下独自完成操作?看看-@VedPrakash的答案,你不需要。这也是一个不同的问题和答案
public static void replaceFragment (@NonNull FragmentManager fragmentManager,
@NonNull Fragment fragment, int frameId){
checkNotNull(fragmentManager);
checkNotNull(fragment);
FragmentTransaction transaction = fragmentManager.beginTransaction();
transaction.replace(frameId, fragment);
transaction.disallowAddToBackStack(); // <-- This makes magic!
transaction.commit();
}
GameFragment fragment = GameFragment.newInstance(mGameObject, currentQuestion);
ActivityUtils.replaceFragment(getFragmentManager(), fragment, R.id.main);