【问题标题】:Fragment OnResume() after OnPause()OnPause() 之后的片段 OnResume()
【发布时间】:2013-08-08 08:59:35
【问题描述】:

我有一个应用程序,其中一部分是相机拍摄照片的片段,当拍摄照片时,会加载另一个片段以显示图像。然后,如果不满意,用户可以选择重新拍摄照片。这应该会回到上一个片段(相机),它会在显示叠加层时进行,但仍会显示之前拍摄的图像。

编辑** 我通过它进行了调试,当拍摄图像并加载下一个片段时,不会调用 onpause(),因此,当用户单击重拍时,不会调用 onresume 来重新实例化我的相机。我知道这里有类似的问题,但我似乎找不到我的问题的答案。**编辑

应该说我正在与其他人在这里整合工作,这造成了混乱。下面是去下一个fragment和去上一个fragment的两种方法

下一个

public void gotoNextFragment(String nextTag, Fragment nextFragment){

    FragmentManager  fm = getSupportFragmentManager();

    FragmentTransaction ft = fm.beginTransaction();
    ft.setCustomAnimations(R.animator.enter_slide_in, R.animator.enter_slide_out);

    boolean newlyCreated = false;
    if(nextFragment == null){
        nextFragment = Fragment.instantiate(this, nextTag);
        newlyCreated = true;
    }

    //hide current fragment
    ft.hide(fm.findFragmentByTag(Misc.currentContentFragmentTag));

    if(newlyCreated){
        ft.add(R.id.content_frame, nextFragment, nextTag);
    }
    else{
        ft.show(nextFragment);
    }
    ft.addToBackStack(null);
    ft.commit();
    Misc.currentContentFragmentTag = nextTag;

}

以前的

public void gobackToPreviousFragment(String preFragmentTag,Fragment f){

    FragmentManager  fm = getSupportFragmentManager();

    FragmentTransaction ft = fm.beginTransaction();
    ft.setCustomAnimations(R.animator.close_slide_in,R.animator.close_slide_out);

    ft.show(f);
    ft.remove(fm.findFragmentByTag(Misc.currentContentFragmentTag));                    
    ft.addToBackStack(null);
    ft.commit();

    Misc.currentContentFragmentTag = preFragmentTag;

}

如果有人对我需要做些什么来确保调用 onResume() 有任何见解,我将不胜感激......

编辑 仍然显示的图像预览是标准相机图像预览的图像预览,而不是来自用于预览的片段

【问题讨论】:

    标签: android android-fragments onresume onpause


    【解决方案1】:

    当您 hide() show() 片段时,您不会收到对 onResume() 的调用。然后您只会在第一次创建片段时收到调用。

    【讨论】:

    • 好的,所以如果我隐藏,我也不会调用 onPause?有没有解决的办法?或者您是否必须替换片段才能调用 onPause() 并依次调用 onResume()?
    • 我怎么没想到……看了太久!!所以隐藏只需调用 onPause 和相同的 show..(onResume)?
    • @DJ-DOO 不完全是。无论你想在 onPause() 中发生什么,我都会转移到一个新方法并调用它。 onResume() 也是如此。
    • 啊,谢谢,很高兴知道。认为隐藏/显示与生命周期有关。
    • @bofredo 我也做过,但我想这也是一个优势。您可以从隐藏的片段中获得即时响应。您无需创建所有内容即可再次显示它们。
    【解决方案2】:

    【讨论】:

    • 我明白,我已经调试过我的代码并且我已经研究过了。但是,在调用 onPause 后重新激活 Fragment 或 Activity 时是否也应该调用 onResume()?
    • 是的,应该。尝试覆盖 onResume() 方法并在其中添加一些 Log.i 或 Toast,以测试它是否真的在应该调用的时候被调用。至少你会得到关于你的问题的新有用信息!
    • 不是这样,我知道这一点是因为我在 onresume 中有断点,现在我添加了 toast 以确保我确定不是,但我仍然不知道为什么
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多