android - support.v7.app.AlertDialog 在关闭时抛出 NullPointerException

标签 android android-alertdialog android-appcompat

我将 AppCompat 更新为新发布的修订版 22.1.0 并将我的 AlertDialog 更改为 support.v7.app.AlertDialog 。但是在 Lollipop 设备上,它会在 dismissDialog() 上抛出以下异常。

java.lang.NullPointerException:   attempt to invoke virtual method 'java.lang.Class java.lang.Object.getClass()' on a null object reference
  at android.support.v7.internal.app.WindowDecorActionBar.getDecorToolbar(WindowDecorActionBar.java:248)
  at android.support.v7.internal.app.WindowDecorActionBar.init(WindowDecorActionBar.java:201)
  at android.support.v7.internal.app.WindowDecorActionBar.<init>(WindowDecorActionBar.java:184)
  at android.support.v7.app.AppCompatDeleg  ateImplV7.cre  ateSupportActionBar(AppCompatDelegateImplV7.java:176)
  at android.support.v7.app.AppCompatDelegateImplBase.getSupportActionBar(AppCompatDelegateImplBase.java:85)
  at android.support.v7.app.AppCompatDelegateImplV7.onStop(AppCompatDeleg  ateImplV7.java:221)
  at android.support.v7.app.AppCompatDialog.onStop(AppCompatDialog.java:108)
  at android.app.Dialog.dismissDialog(Dialog.java:438)
  at android.app.Dialog.dismiss(Dialog.java:414)
  at android.support.v7.app.AlertController$ButtonHandler.handleMessage(AlertController.java:157)
  at android.os.Handler.dispatchMessage(Handler.java:102)
  at android.os.Looper.loop(Looper.java:145)
  at android.app.ActivityThread.main(ActivityThread.java:5834)
  at java.lang.reflect.Method.invoke(Native Method)
  at java.lang.reflect.Method.invoke(Method.java:372)
  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1388)
  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1183)

我该如何解决?

(低版本设备似乎运行良好。这只是发生在 Lollipop 中)

+ 我没有在我的代码中显式调用 dismiss()。当被后退按钮或正/负按钮关闭时,对话框抛出异常。

++ 这是我使用 v7.app.AlertDialog 的代码。谢谢。

import android.app.Dialog;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.support.v7.app.AlertDialog;
import android.text.TextUtils;

public class SimpleYesNoFragment extends DialogFragment {

    public interface OnConfirmListner {
        public void onConfirm();
    }

    public static SimpleYesNoFragment newInstance(String title, String message) {
        SimpleYesNoFragment fragment = new SimpleYesNoFragment();
        Bundle args = new Bundle();
        args.putString("title", title);
        args.putString("message", message);
        fragment.setArguments(args);

        return fragment;
    }

    private OnConfirmListner mListener;

    public void setOnConfirmListener(OnConfirmListner l) {
        mListener = l;
    }

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        AlertDialog.Builder b=  new  AlertDialog.Builder(getActivity())
        .setPositiveButton(R.string.yes, new OnClickListener() {

            @Override
            public void onClick(DialogInterface dialog, int which) {
                if(mListener != null) {
                    mListener.onConfirm();
                }
            }
        })
        .setNegativeButton(R.string.no, new OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
            }
        });

        Bundle args = getArguments();
        String title = args.getString("title",null);
        if(!TextUtils.isEmpty(title)) {
            b.setTitle(title);
        }
        String message = args.getString("message",null);
        if(!TextUtils.isEmpty(message)) {
            b.setMessage(message);
        }

        return b.create();
    }
}

最佳答案

偶然我注意到我的项目有 values-v21/themes.xml 并且它应用了 android:Theme.Material.Light.Dialog.Alertsupport.v7.app.AlertDialog。这导致了奇怪的错误。

使用适当的 AppCompat 主题,例如 Theme.AppCompat.Light.Dialog.Alert,到 support.v7.app.AlertDialog 解决了这个问题。感谢大家帮助我。

关于android - support.v7.app.AlertDialog 在关闭时抛出 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29815115/

相关文章:

java - 如何获取Android系统主题变更的通知?

FrameLayout中的Android中心 View 不起作用

android - 访问短信移动应用程序

android - 当 Activity 回到前台时,AlertDialog 是不可见的

android - 单击按钮时如何防止对话框关闭

android - 使用 DrawableCompat 类应用 tintList

android - RuntimeException 内容具有 id 属性为 'android.R.id.list_container' 的 View ,该 View 不是 ViewGroup 类

java - 按下 WebView 内的按钮不起作用

android - 在 onItemLongClick 中显示 AlertDialog 会给出有关父项的错误,我必须做什么?

android - ActionBarActivity 在按下硬件菜单按钮后关闭。没有堆栈跟踪