我编写了一个在两个片段之间切换的虚拟活动。从FragmentA到FragmentB时,FragmentA被添加到后面的堆栈中。但是,当我返回到FragmentA时(按下back),创建了一个全新的FragmentA,并且丢失了它所处的状态。我感觉我在寻找与这个问题相同的东西,但我包含了一个完整的代码示例来帮助解决这个问题:
public class FooActivity extends Activity {
@Override public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.replace(android.R.id.content, new FragmentA());
transaction.commit();
}
public void nextFragment() {
final FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.replace(android.R.id.content, new FragmentB());
transaction.addToBackStack(null);
transaction.commit();
}
public static class FragmentA extends Fragment {
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
final View main = inflater.inflate(R.layout.main, container, false);
main.findViewById(R.id.next_fragment_button).setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
((FooActivity) getActivity()).nextFragment();
}
});
return main;
}
@Override public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
// Save some state!
}
}
public static class FragmentB extends Fragment {
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.b, container, false);
}
}
}
07-05 14:28:59.722 D/OMG ( 1260): FooActivity.onCreate
07-05 14:28:59.742 D/OMG ( 1260): FragmentA.onCreateView
07-05 14:28:59.742 D/OMG ( 1260): FooActivity.onResume
<Tap Button on FragmentA>
07-05 14:29:12.842 D/OMG ( 1260): FooActivity.nextFragment
07-05 14:29:12.852 D/OMG ( 1260): FragmentB.onCreateView
<Tap 'Back'>
07-05 14:29:16.792 D/OMG ( 1260): FragmentA.onCreateView
然而,如果在删除片段时调用addToBackStack(),则该片段将被停止,并且在用户返回时将被恢复。
如果从后堆栈返回片段,它不会重新创建片段,而是重用同一个实例,并在片段生命周期中以oncreateview()
开始,请参见fragment lifecycle。
因此,如果要存储状态,应该使用实例变量,而不是依赖onsaveInstanceSteste()
。
我需要一些帮助。em以这种方式向活动添加片段。问题是每次调用openFragment时,它都会创建片段并添加。这是显而易见的。问:我做了什么修改,所以它只能添加一次片段。在下一次使用相同的片段标记调用时,它不会执行任何操作。 案例:第一次按下按钮添加片段并显示。我再按一次同样的按钮,它没有反应。
我正在使用UI导航图。我有片段和。我的应用程序在片段上启动,以显示一些信息。然后,用户可以按下后退键,以结束。然后,用户通常从中选择一些内容,并以结束。 通常,我可以从堆栈中弹出并显示。但是,当应用程序刚刚启动时,后面的堆栈中没有。我想我可以手动将添加到backstack,但我想知道导航UI图是否允许我这样做。 我无法更改应用程序片段的顺序。这意味着我仍然需要首先显示。
Back Stack是否支持与Android中的嵌套片段交互? 如果是这样,我做错了什么?在我的实现中,后退按钮完全忽略了我将此事务添加到后堆栈的事实。我希望这不是因为嵌套片段的问题,只是我做了一些不正确的事情。 以下代码位于我的一个片段中,用于将新片段与当前显示的任何嵌套片段交换:
可以使用保存删除片段时的状态,然后在将片段弹出后堆栈时恢复状态吗?当我从后堆栈还原片段时,savedInstanceState包始终为空。 现在,应用程序流程是:创建的片段->删除的片段(添加到后堆栈)->从后堆栈恢复的片段(savedInstanceState包为空)。 下面是相关代码: 我认为问题是在被移除和添加到后堆栈时从未被调用。如果我不能使用onsavedInstanceState(),
我尝试使用Android导航组件,但后堆栈有问题。 我有片段A,B。要从A导航到B,我写下: 但我如何才能返回到点击的返回按钮?
问题内容: 我在SO上发现了许多类似问题的实例,但不幸的是,没有答案符合我的要求。 我对人像和风景有不同的布局,并且我使用的是后向堆栈,这既妨碍了我的使用,又使我无法使用配置更改例程。 我在TextViews中向用户显示某些信息,这些信息不会保存在默认处理程序中。当仅使用“活动”编写我的应用程序时,以下方法运行良好: 使用,这仅在非常特殊的情况下有效。具体地说,令人震惊的是替换片段,将其放回堆栈中