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