我將AppCompat
更新爲新發布的修訂版22.1.0
,並將我的AlertDialog
更改爲support.v7.app.AlertDialog
。但在棒棒糖設備上,它會在dismissDialog()
上引發以下異常。support.v7.app.AlertDialog在關閉時拋出NullPointerException
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)
我該如何解決?
(低版本的設備似乎運作良好,這是剛剛發生的棒棒糖)
+ 我沒有在我的代碼調用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();
}
}
你從哪裏得到了你調用'dismiss()'方法的對話框的引用?如果您發佈了代碼片段,這將更容易幫助 –
請發佈您的代碼。沒有它,我們不能回答你的問題。 – Sufian
@KamranAhmed我在問題中添加了最後一行 – hoonj