问题是:
我有一个带有2个片段的活动:片段1和片段2。
点击一个项目后,从我的回收站视图我调用Fragment2与以下行:
fragmentTransaction.add(R.id.frmFragmentItem,detailsFragment);
当用户关闭Fragment2(BackButton或关闭按钮)时,Fragment1再次出现在屏幕上。
我需要的是:
当Fragment1实例再次出现在屏幕中时,调用的事件是哪个?
在修改了片段的以下生命周期之后,我认为可能是onCreateView()或onResume(),但不是(因为断点没有停止)。
问题是:
那么,你能告诉我当Fragment1再次出现在屏幕上时调用哪个事件吗(片段的实例已经创建)
另一种可能性?
我还想用startActivityForResult
Fragment2 detailsFragment = new Fragment2 ();
android.support.v4.app.FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.add(R.id.frmFragmentItem,detailsFragment);
fragmentTransaction.commit();
谢谢
在@Ascorbin回答之后,我可以实现他所说的:
您可以做的是向片段backstack添加一个侦听器,并在片段1从backstack弹出时获得通知
我认为展示如何实现解决方案很重要,因为在互联网上没有关于它的信息。
对于实现,您必须做到:
1.
包含片段的活动必须实现OnBackbackChangedListener,如下面的代码所示
public class Activity extends AppCompatActivity implements FragmentManager.OnBackStackChangedListener
2.
然后,在活动中,您必须覆盖侦听器,以便:
@Override
public void onBackStackChanged() {
if(fragment1 != null)
fragment1.doTheAction();
}
因此,当用户再次从Fragment2返回到Fragment1时,将调用onBackStackChanged方法,Fragment1将执行doTheAction函数。
最后,当Fragment1启动Fragment2时,我在活动中执行以下代码:
Fragment2 secondFragment= new Fragment2();
android.app.FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
fragmentTransaction.add(R.id.frmFragmentItem,secondFragment);
fragmentTransaction.addToBackStack("FRAGMENT_1");
getFragmentManager().addOnBackStackChangedListener(this);
fragmentTransaction.commit();
在那之后,你不需要做任何其他事情。
不错的编码!
fragmentTransaction.add(R.id.frmFragmentItem,detailsFragment);
不会从容器中删除片段。它仍然驻留在容器中,这就是您不接收回调的原因。
如果你使用,
fragmentTransaction.replace(R.id.frmFragmentItem,detailsFragment);
前一个片段将从容器中删除,您将收到您期望的正确回调。
不幸的是,这里发布的片段的生命周期事件都不会被调用。
starActivityForResult
不会帮助你处理碎片时。
您可以做的是向片段后栈添加侦听器,并在从后栈弹出片段1时获得通知。你可以在你的活动
中这样做,保留你的片段
的引用,然后调用片段
上的一些方法来通知它它已经“重新出现”。
我有FragmentA和FragmentB,当FragmentA变回可见时,我有一个设置活动标题的问题。 流动 null 碎片b
嗨,伙计们,这是我的密码 我基本上只有2个碎片,只有家庭装饰应该添加到背面堆叠。在HomeFragment和OtherFragment之间切换了一段时间,然后在HomeFragment上单击back按钮,最后我会看到HomeFragment显示了好几次。在家庭框架内有一个回收视图。当我上下滚动时,我真的可以看到行显示了多次。我如何才能确保家庭装饰只添加到一次后堆栈。 谢谢
如何从堆栈中弹出特定片段,并从片段中删除其他片段?例如,这些是我的片段,我现在在E right know。 A- 想从E回到B,清除C和D。我怎么能做到这一点?
可以使用保存删除片段时的状态,然后在将片段弹出后堆栈时恢复状态吗?当我从后堆栈还原片段时,savedInstanceState包始终为空。 现在,应用程序流程是:创建的片段->删除的片段(添加到后堆栈)->从后堆栈恢复的片段(savedInstanceState包为空)。 下面是相关代码: 我认为问题是在被移除和添加到后堆栈时从未被调用。如果我不能使用onsavedInstanceState(),
我想在这个导航用例中避免这种情况:A- 其中所有片段实例都保存在后栈中。原因:避免内存溢出错误。 我尝试创建一个自己的导航工作流,如下所述:https://stackoverflow.com/questions/18041583/fragments-backstack-issue?noredirect=1#comment26393904_18041583(它应该模仿活动行为,在开始一个新操作后调用
我有一个包含框架布局的活动,片段A托管在这里与一起。 此片段A托管了另外两个包含回收器视图的片段——使用< code > fragmentstatepageradar 的片段A1和片段A2。此时,我能够在片段A1和A2中使用< code > getSupportFragmentManager()获得父片段。 单击A1和A2中的回收器视图项会产生另一个片段,比如片段B,它会替换片段A并将其添加到ba