【问题标题】:DialogFragment trying to open after coming back from the backgroundDialogFragment 从后台返回后尝试打开
【发布时间】:2015-07-14 22:27:47
【问题描述】:

我正在显示一个 DialogFragment,当用户返回后台然后返回应用程序时,将显示对话框。

有没有办法在后台回来的时候不显示?

我试过这个(EDIT:按照一些建议将它从 onStop 移到 onPause):

  @Override
  public void onPause() {
    if (dialogFragment.isVisible()) {
       dialogFragment.dismissAllowingStateLoss();
    }
    super.onPause();
  }

但是得到了这个:

引起:java.lang.NullPointerException:尝试调用虚拟 方法'android.support.v4.app.FragmentTransaction android.support.v4.app.FragmentManager.beginTransaction()' 为空 对象引用

有什么想法吗?

【问题讨论】:

    标签: android android-dialogfragment


    【解决方案1】:

    您可以尝试使用dismissAllowingStateLoss()

    dialogFragment.dismissAllowingStateLoss();
    

    代替:

    dialogFragment.dismiss();
    

    但是这应该是必需的,因为您在 onStop() 中将其关闭。您应该尝试在 onPause() 中将其关闭。

    【讨论】:

    • 还有dismissAllowingStateLoss ?
    • 是的,由于 FragmentTransaction 为空,它会因 NPE 而崩溃
    • @Kalisky 您是否使用getSupportFragmentManager() 进行交易?也许当您尝试显示对话框时,您会使用 fragment.show(getFragmentManager(), "yourtag"); 之类的东西,但由于您使用的是支持库,因此您需要 getSupportFragmentManager() 而不是 getFragmentManager()
    • 想了想,确定都是getSupportFragmentManager()
    【解决方案2】:

    添加此方法。

     @Override
        protected void onDestroy() {
                super.onDestroy();
                if(dialogFragment != null && dialogFragment.isVisible()) {
                    dialogFragment.dismiss();
                }
    
            }
    

    【讨论】:

      【解决方案3】:

      我认为在上面的答案中隐藏对话框的更好地方是 onPause()。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-08-28
        • 2013-08-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多