Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/223.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
非平凡的android片段回退_Android_Fragment - Fatal编程技术网

非平凡的android片段回退

非平凡的android片段回退,android,fragment,Android,Fragment,我正在尝试实现以下片段设计: 片段A被片段B替换,而片段B又被片段C替换。 无论是在片段B还是C中,我都希望用户返回导航将其带回片段A。 当用B替换A时,我添加到backbackback。但是当我从B移动到C时,我不会添加到backbackback。 从片段B返回时,一切正常。 但是,当从C返回时,我在同一个屏幕上看到A和C,C并没有消失。 我不知道这是否与我的backbackback用法有关。 感谢您的帮助 我的代码相当于: Fragment fragment; fragment = new

我正在尝试实现以下片段设计: 片段A被片段B替换,而片段B又被片段C替换。 无论是在片段B还是C中,我都希望用户返回导航将其带回片段A。 当用B替换A时,我添加到backbackback。但是当我从B移动到C时,我不会添加到backbackback。 从片段B返回时,一切正常。 但是,当从C返回时,我在同一个屏幕上看到A和C,C并没有消失。 我不知道这是否与我的backbackback用法有关。 感谢您的帮助

我的代码相当于:

Fragment fragment;

fragment = new FragmentA();
transaction.replace(R.id.container, fragment);
transaction.commit();

fragment = new FragmentB();
transaction.replace(R.id.container, fragment);
transaction.addToBackStack(null);
transaction.commit();

fragment = new FragmentC();
transaction.replace(R.id.container, fragment);
transaction.commit();

这是添加到backbackback的一般方法。使用标签

FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
Fragment1 fragment1 = new Fragment1();
fragmentTransaction.replace(R.id.fragment_container, fragment1, Fragment1.class.getName());
fragmentTransaction.addToBackStack(Fragment1.class.getName());
fragmentTransaction.commit();
同样,对于frament2:

FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
Fragment2 fragment2 = new Fragment2();
fragmentTransaction.replace(R.id.fragment_container, fragment2, Fragment2.class.getName());
fragmentTransaction.addToBackStack(Fragment2.class.getName());
fragmentTransaction.commit();
对fragment3执行同样的操作。 现在,您可以使用以下方法从backstack中删除碎片2:

getFragmentManager().popBackStack(
    Fragment2.class.getName(), 
    FragmentManager.POP_BACK_STACK_INCLUSIVE);
您应该能够直接从fragment3跳回到fragment2


另外,您正在使用fragmentTransaction.replace(…)而不是fragmentTransaction.add(…)。你能发布相关代码吗?

这是添加到backbackback的一般方法。使用标签

FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
Fragment1 fragment1 = new Fragment1();
fragmentTransaction.replace(R.id.fragment_container, fragment1, Fragment1.class.getName());
fragmentTransaction.addToBackStack(Fragment1.class.getName());
fragmentTransaction.commit();
同样,对于frament2:

FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
Fragment2 fragment2 = new Fragment2();
fragmentTransaction.replace(R.id.fragment_container, fragment2, Fragment2.class.getName());
fragmentTransaction.addToBackStack(Fragment2.class.getName());
fragmentTransaction.commit();
对fragment3执行同样的操作。 现在,您可以使用以下方法从backstack中删除碎片2:

getFragmentManager().popBackStack(
    Fragment2.class.getName(), 
    FragmentManager.POP_BACK_STACK_INCLUSIVE);
您应该能够直接从fragment3跳回到fragment2


另外,您正在使用fragmentTransaction.replace(…)而不是fragmentTransaction.add(…)。你能发布相关代码吗?

{{{我的代码相当于:Fragment Fragment;Fragment=new FragmentA();transaction.replace(R.id.container,Fragment);transaction.commit();Fragment=new FragmentB();transaction.replace(R.id.container,Fragment);transaction.addToBackStack(null);transaction.commit();FragmentC=new FragmentC();transaction.replace(R.id.container,fragment);transaction.commit();}}}}}addToBackStack(null)是主要问题,请尝试按照建议分配标记Fragment1.class.getName(),并使用其标记弹出第二个片段。然后可以直接从第3个片段跳到第1个片段{{{我的代码相当于:fragment fragment;fragment=new FragmentA();transaction.replace(R.id.container,fragment);transaction.commit();fragment=new FragmentB();transaction.replace(R.id.container,fragment);transaction.addToBackStack(null);transaction.commit();fragment=new FragmentC();transaction.replace(R.id.container,fragment);transaction.commit();}}}}}主要问题是addToBackStack(null),请尝试按照建议分配标签Fragment1.class.getName(),并使用其标签弹出第二个片段。然后可以直接从第3个片段跳到第1个片段{{{我的代码相当于:fragment fragment;fragment=new FragmentA();transaction.replace(R.id.container,fragment);transaction.commit();fragment=new FragmentB();transaction.replace(R.id.container,fragment);transaction.addToBackStack(null);transaction.commit();fragment=new FragmentC();transaction.replace(R.id.container,fragment);transaction.commit();}}}}}主要问题是addToBackStack(null),请尝试按照建议分配标签Fragment1.class.getName(),并使用其标签弹出第二个片段。然后,您可以直接从第3个片段跳到第1个片段)