安卓开发重写onBackPressed()方法不能处理对话框返回事件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了安卓开发重写onBackPressed()方法不能处理对话框返回事件相关的知识,希望对你有一定的参考价值。

一般在一个activity里面开启一个对话框AlertDialog的时候,按安卓手机的返回键就默认对话框消失。但我想在界面打开对话框的时候按返回键程序干点别的事情,例如关闭一个线程,或者显示一个土司。就像这样:
public void onBackPressed()
//如果绑定窗口已经开启,就关闭。
if(dai_open) //dai_open是窗口开启状态量
Toast.makeText(MainActivity.this, "对话框开着,现在关闭", 0).show();

else
Toast.makeText(MainActivity.this, "对话框没有开启", 0).show();

super.onBackPressed();

但是当我开启对话框时候点击手机返回键时候,没有反应。只有对话框关闭了点击返回键,他才起会打印土司。请大神解决

这个问题我遇到过,你可以私信我。
我在此给你两个解决方法:
1、使用Popupwindow实现对话框;然后重写里面的返回事件;
2、可以自定义一个Activity,让其表现的类似于对话框;

综上的两种方法都是绕过AlertDialog,自己实现对话框的。

我常用的是第二种方法,使用Activity自定义自己的对话框。追问

怎么用一个activity来代替的啊

追答

把Activity描绘成一个窗口的样式即可。
这方面你可以到网上搜索一下使用android的Activity自定义对话框。
应该会有相关的DEMO的。

参考技术A 在android开发中,当不满足触发条件就按返回键的时候,就要对此进行检测。尤其是当前Activity需要往前一个Activity传送消息时。即Activity1跳转到Activity3如果采用的是startActivityForResult这种方式,如果不重写返回键,程序不知道要返回给Activity1什么内容就会报错。因此,必须对Activity3的返回按键重写,这里让他传一个“ERROR”信息:
@Override
public void onBackPressed()
// TODO Auto-generated method stub
Intent backIntent = new Intent(Activity3.this, Activity1.class);
Bundle bundle = new Bundle();
if(!clickOk)
bundle.putString("send", "ERROR");
backIntent.putExtras(bundle);
Activity3.this.setResult(1, backIntent);
Activity3.this.finish();
//super.onBackPressed();

Android 重写onBackPressed()方法 不执行问题

@Override
public void onBackPressed() {
  // TODO Auto-generated method stub
  super.onBackPressed();
  Toast.makeText(this, "呵呵哈哈", Toast.LENGTH_LONG).show();
  //return ;
}

 

这样,当按回退健时,activity退出,并且提示"呵呵哈哈"!

当注释掉super.onBackPressed()时,按回退健,只提示"呵呵哈哈"!

onBackPressed()在Activity.class里实现:

    public void onBackPressed() {
        finish();
    }


super.onBackPressed()是执行系统的默认动作,就是退出当前activity,所以当我们要重写这个函数时,不要加super.onBackPressed(),就可以不退出activity,执行自己的代码啦~

 

来自:http://www.2cto.com/kf/201304/204021.html

以上是关于安卓开发重写onBackPressed()方法不能处理对话框返回事件的主要内容,如果未能解决你的问题,请参考以下文章

Android 重写onBackPressed()方法 不执行问题

android中使用startactivityforresult跳转Activity后需要重写onBackPressed()方法

onBackPressed() 使用

JS调用onBackPressed

onBackPressed() 监听返回按键事件

Flutter中onbackpressed的等效方法是啥