Dev*_*ice 4 android android-alertdialog
一位用户昨天向我发送了这份崩溃报告:
android.view.WindowManager$BadTokenException: Unable to add window -- token android.os.BinderProxy@4250d6d8 is not valid; is your activity running?
at android.view.ViewRootImpl.setView(ViewRootImpl.java:698)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:326)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:224)
at android.view.WindowManagerImpl$CompatModeWrapper.addView(WindowManagerImpl.java:149)
at android.view.Window$LocalWindowManager.addView(Window.java:552)
at android.app.Dialog.show(Dialog.java:277)
at android.app.AlertDialog$Builder.show(AlertDialog.java:932)
at android.webkit.CallbackProxy.handleMessage(CallbackProxy.java:833)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4867)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1007)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:774)
at dalvik.system.NativeStart.main(Native Method)
Run Code Online (Sandbox Code Playgroud)
所以我搜索了,据说解决方案是this改为Activity.this
但是即使我使用以下代码,这个解决方案也没有用:
//Oncreate Method.....
button.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
AlertDialog.Builder alertd = new AlertDialog.Builder(MainActivity.this);
alertd.setMessage("StackOverflow");
alertd.setTitle("Example");
AlertDialog alertd2 = alertd.create();
alertd2.show();
}
});
Run Code Online (Sandbox Code Playgroud)
我应该改变什么吗?
最后,我找到了解决方案.问题是,尽管您的活动已完成,但您的提醒会尝试显示.
所以你应该做的是在显示警报之前检查活动是否完成.为此, isFinishing() 方法在Activity类中定义.
这是你要做的:
if(!isFinishing())
{
alert.show();
}
Run Code Online (Sandbox Code Playgroud)
玩得开心.
| 归档时间: |
|
| 查看次数: |
7836 次 |
| 最近记录: |