【问题标题】:Returning back to an Activity after calling and closing a Fragment does not change my Activity's lifecycle调用并关闭 Fragment 后返回 Activity 不会改变我的 Activity 的生命周期
【发布时间】:2015-06-27 00:11:31
【问题描述】:

给定一个充当主页(它永远不会关闭)并启动各种片段的 Activity,如何知道该 Activity 何时对用户可见?

据我观察,当我打开片段时,Activity 的生命周期永远不会改变,不会调用 onPause()。当我关闭片段时,我的 Activity 不会调用 onResume()。

这是我开始我的片段的方式,我正在使用这个方法并将我想要启动的片段传递给它。

public void addFragment(int containerId, Fragment fragment, boolean addToBackStack) {
    // Check if the fragment has been added already. If so, then
    // don't add the fragment.
    Fragment temp = mFragmentManager.findFragmentByTag(fragment.getClass().getName());
    if(temp != null && temp.isAdded()) {
        return;
    }

    FragmentTransaction ft = mFragmentManager.beginTransaction();

    ft.add(containerId, fragment, fragment.getClass().getName());
    if(addToBackStack) 
        ft.addToBackStack(null);        

    ft.commit();
}

指示我的活动再次可见的方法是什么?提前致谢!

【问题讨论】:

    标签: android android-fragments android-lifecycle


    【解决方案1】:

    在你的 home Activity 的 oncreate 方法中,调用

    mFragmentManager.addOnBackStackChangedListener(this) ;
    

    然后定义

    @Override
    public void onBackStackChanged() {
        int backStackCount = mFragmentManager.getBackStackEntryCount();
        if(backStackCount == 0) {} //back to home screen
    }
    

    【讨论】:

      【解决方案2】:

      您的Activity 始终是Visible,即使同时显示数千个Fragments,为了便于理解,片段只是Custom-Views,片段可以帮助处理您的@ 987654325@,因此当片段死亡或出生时,您的活动上的 onPause() 不需要调用,就像膨胀视图一样。

      就像@Tim Mutton 爵士说的那样,你需要检查你的 BackStack 以知道你是否回来了,或者你可以使用 ViewGroup 方法 ViewGroup.indexOfChild(View child) - 这个方法将一个 int 值 getChildCount()-1 这意味着它在它的兄弟姐妹之上..

      希望对你有帮助

      【讨论】:

      • 谢谢你的回答,现在这个越来越清楚了
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-30
      • 1970-01-01
      相关资源
      最近更新 更多