2 myq 26 myq_26 于 2013.05.27 14:22 提问

onBackPressed() 显示错误

当在 mainactivity 中点击 back 按钮时,我想添加一个exit warning。使用的下面的代码:

@Override
public void onBackPressed() {
    // TODO Auto-generated method stub

    final Dialog dialoge=new Dialog(MainActivity.this,android.R.style.Theme_Translucent_NoTitleBar);
    dialoge.setContentView(R.layout.popup_layout);
    Button yes=(Button)dialoge.findViewById(R.id.yes);
    yes.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            MainActivity.this.finish();
        }
    });
    Button no=(Button)dialoge.findViewById(R.id.no);
    no.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            dialoge.cancel();
        }
    });
    dialoge.show();
}

代码能运行,但是当退出时,显示一些错误:
Logcat:

05-21 10:25:57.192: E/WindowManager(14488): Activity com.example.design.MainActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@447fec28 that was originally added here
05-21 10:25:57.192: E/WindowManager(14488): android.view.WindowLeaked: Activity com.example.design.MainActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@447fec28 that was originally added here
05-21 10:25:57.192: E/WindowManager(14488):     at android.view.ViewRoot.<init>(ViewRoot.java:251)
05-21 10:25:57.192: E/WindowManager(14488):     at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:148)
05-21 10:25:57.192: E/WindowManager(14488):     at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
05-21 10:25:57.192: E/WindowManager(14488):     at android.view.Window$LocalWindowManager.addView(Window.java:424)
05-21 10:25:57.192: E/WindowManager(14488):     at android.app.Dialog.show(Dialog.java:241)
05-21 10:25:57.192: E/WindowManager(14488):     at com.example.design.MainActivity.onBackPressed(MainActivity.java:97)
05-21 10:25:57.192: E/WindowManager(14488):     at android.app.Activity.onKeyUp(Activity.java:1895)
05-21 10:25:57.192: E/WindowManager(14488):     at android.view.KeyEvent.dispatch(KeyEvent.java:1283)
05-21 10:25:57.192: E/WindowManager(14488):     at android.app.Activity.dispatchKeyEvent(Activity.java:2075)
05-21 10:25:57.192: E/WindowManager(14488):     at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1673)
05-21 10:25:57.192: E/WindowManager(14488):     at android.view.ViewRoot.deliverKeyEventToViewHierarchy(ViewRoot.java:2493)
05-21 10:25:57.192: E/WindowManager(14488):     at android.view.ViewRoot.handleFinishedEvent(ViewRoot.java:2463)
05-21 10:25:57.192: E/WindowManager(14488):     at android.view.ViewRoot.handleMessage(ViewRoot.java:1752)
05-21 10:25:57.192: E/WindowManager(14488):     at android.os.Handler.dispatchMessage(Handler.java:99)
05-21 10:25:57.192: E/WindowManager(14488):     at android.os.Looper.loop(Looper.java:143)
05-21 10:25:57.192: E/WindowManager(14488):     at android.app.ActivityThread.main(ActivityThread.java:4914)
05-21 10:25:57.192: E/WindowManager(14488):     at java.lang.reflect.Method.invokeNative(Native Method)
05-21 10:25:57.192: E/WindowManager(14488):     at java.lang.reflect.Method.invoke(Method.java:521)
05-21 10:25:57.192: E/WindowManager(14488):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
05-21 10:25:57.192: E/WindowManager(14488):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
05-21 10:25:57.192: E/WindowManager(14488):     at dalvik.system.NativeStart.main(Native Method)

如何修改?

1个回答

hxn_217
hxn_217   2013.05.27 17:38
@Override
    public void onClick(View v) {
        // TODO Auto-generated method stub

        // here you need to dismiss your dialog before finishing activity
        if (dialoge != null) {
            dialoge.cancel();
            dialoge = null;
        }

        MainActivity.this.finish();

    }
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
onBackPressed
@Override public void onBackPressed() { super.onBackPressed(); } 不需要再加finish() 请看源码: public void onBackPressed() { if (!mFragments.getSupportFragmentManager().popBackStackImmedia
onBackPressed()的用法
android手机下面有3个实体按键,back,home,menu;当触发back键的时候,activity会返回,那肯定是调用了某个方法,其实那个方法就是onBackPressed()方法。 下面是直接新建一个andorid工程,什么都没修改,然后重写了onBackPressed()方法。代码如下。 运行结果如下: 注意看下图:单击返回键的时候,会有一个Toast,这说明调
onBackPressed() 使用 .
2012-10-26 17:16 3973人阅读 评论(1) 收藏 举报   onBackPressed() : 当手机按下back键时,执行此方法。   用此方法时 :有super.onBackPressed() 时 不能把在此方法中设置的 intent 传回上一个Activity ,                         因此 去掉super.onBackPr
onKeyDown和onBackPressed
很多网友不明白如何在Android平台上捕获Back键的事件,Back键是手机上的后退键,一般的软件不捕获相关信息可能导致你的程序被切换到后台,而回到桌面的尴尬情况,在Android上有两种方法来获取该按钮的事件。   1.直接获取按钮按下事件,此方法兼容Android 1.0到Android 2.1 也是常规方法,直接重写Activity的onKeyDown方法即可,代码如下: @O
onBackPressed的用法
back键调用onBackPressed()方法
onBackPressed() 使用
onBackPressed() : 当手机按下back键时,执行此方法。   用此方法时 :有super.onBackPressed() 时 不能把在此方法中设置的 intent 传回上一个Activity ,                         因此 去掉super.onBackPressed()  在末尾加上finish();                
Android——onKeyDown与onBackPressed(未完)
今天在重构一个项目的时候,在onKeyDown和onBackPressed上开始纠结了。双击退回这个就一段代码而已,并不难。 //双击退出程序 @Override public void onBackPressed() { sy("onBackPressed"); if (isExit) { Intent intent =
fragment监听onBackPressed返回键
Activity可以直接重写onBackPressed监听返回键,但是fragment不能直接监听。一种方法是通过接口回调实现监听,就是在Fragment中实现回调接口,Activity中重写onBackPressed,然后调用接口,该方法稍微麻烦了一点,下面是一个简洁的方式,参考原文:http://stackoverflow.com/questions/22552958/handling-bac
安卓方法——onBackPressed()
原文链接:http://www.cnblogs.com/qiluboy/p/5308310.html 一、onBackPressed()方法的解释  这个方法放在 void android.app.Activity.onBackPressed()   在安卓API中它是这样解释的: public void onBackPressed () Added in
onBackPressed、onKeyDown、finish、onDestroy
监听返回键的两种方式: // 捕获返回键的方法1 @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) { // 按下