Android 当片段再次从堆栈中出现时,调用哪个事件

Android 当片段再次从堆栈中出现时,调用哪个事件,android,android-fragments,Android,Android Fragments,问题: 我有一个带有2个片段的活动:片段1和片段2 单击my RecyclerView中的一个项目后,我使用以下行调用Fragment2: fragmentTransaction.add(R.id.frmFragmentItem,detailsFragment); 当用户关闭Fragment2(BackButton或Close按钮)时,Fragment1再次出现在屏幕上 我需要什么: 当Fragment1实例再次出现在屏幕中时,调用的事件是哪个 修改片段的以下生命周期后,我认为可能是onCre

问题:

我有一个带有2个片段的活动:片段1片段2

单击my RecyclerView中的一个项目后,我使用以下行调用Fragment2:

fragmentTransaction.add(R.id.frmFragmentItem,detailsFragment);
当用户关闭Fragment2(BackButton或Close按钮)时,Fragment1再次出现在屏幕上

我需要什么:

当Fragment1实例再次出现在屏幕中时,调用的事件是哪个

修改片段的以下生命周期后,我认为可能是onCreateView()onResume(),但不是(因为断点没有停止)

问题:

那么,你能告诉我当Fragment1再次出现在屏幕上时调用哪个事件吗(片段的实例已经创建)

另一种可能性?

我还想使用startActivityForResult&onActivityResult,但如果我用以下几行调用Fragment2,我不知道如何使用它:

Fragment2 detailsFragment = new Fragment2 ();
        android.support.v4.app.FragmentManager fragmentManager = getSupportFragmentManager();
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        fragmentTransaction.add(R.id.frmFragmentItem,detailsFragment);
        fragmentTransaction.commit();

谢谢。

不幸的是,片段的生命周期事件都不会被调用为

startActivityForResult
在处理
Fragment
s时对您没有帮助

片段1
从后台弹出时,您可以这样做并得到通知。 您可以在
活动中执行此操作,保留
片段的引用,然后调用
片段上的某个方法,通知它已“重新出现”

不会从容器中删除片段。它仍然驻留在容器中,这就是您不接收回调的原因

如果你使用

fragmentTransaction.replace(R.id.frmFragmentItem,detailsFragment);

前面的片段将从容器中删除,您将收到预期的正确回调。

在@Ascorbin answer之后,我可以实现他所说的:

您可以做的是向片段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时,将调用onbackbackChanged方法,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();
在那之后,你不需要做任何其他事情


编码不错

我知道你的意思,我认为你是对的,但是你能再给我解释一下如何实现它吗?谢谢,你能给我举个例子吗?谢谢
 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();