Android 当片段再次从堆栈中出现时,调用哪个事件
问题: 我有一个带有2个片段的活动:片段1和片段2 单击my RecyclerView中的一个项目后,我使用以下行调用Fragment2: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
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();