繁体   English   中英

按下后退按钮后立即拨打方法(Android)

[英]Make a method call as soon as back button has been pressed (Android)

在给定的活动中,AlertDialog将用户带入WiFI设置。 然后,用户按下后退按钮返回所述活动。

但是,只要按下后退按钮,我就需要进行方法调用。 请注意,我不能简单地在活动中添加以下代码后的方法,因为这会影响用户与AlertDialog实例交互的时间。

一旦从WIFI设置菜单按下后退按钮,就需要进行方法调用 请告诉我如何实现这一点。

这是代码:

alertDialog.setPositiveButton("Settings", new dialogInterface.OnClickListener() {
         @Override
         public void onClick(DialogInterface dialog, int which) {
          Intent intent = new Intent(Settings.ACTION_WIFI_SETTINGS);
          startActivity(intent);
         }
     });

班级成员

private static final int WIFI_REQUEST = 1234;

使用startActivityForResult

alertDialog.setPositiveButton("Settings", new dialogInterface.OnClickListener() {
     @Override
     public void onClick(DialogInterface dialog, int which) {
      Intent intent = new Intent(Settings.ACTION_WIFI_SETTINGS);
      startActivityForResult(intent, WIFI_REQUEST);
     }
 });  

在活动类中

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent intent)
{
    super.onActivityResult(requestCode, resultCode, intent);

    switch (requestCode)
    {
         case WIFI_REQUEST:
              // Call your method here
              break;
    }
}

您可以Override调用ActivityonResume()方法。 一旦用户按下“后退” buttononResume()方法肯定会被调用,所以你应该可以在这里调用你的方法

private boolean inwifisettings;

public void onClick(DialogInterface dialog, int which) {
    Intent intent = new Intent(Settings.ACTION_WIFI_SETTINGS);
    inwifisettings = true;
    startActivity(intent);
}

@Override public void onWindowFocusChanged(boolean hasFocus)
{
    if(inwifisettings & hasFocus)
    {
         doSomething();
         inwifisettings = false;
    }
}

为此,您不应该使用onResume()或startActivityForResult()/ onActivityResult()。 引用Android文档: http//developer.android.com/reference/android/app/Activity.html

public void startActivityForResult(Intent intent,int requestCode,Bundle options)
请注意,此方法只应与定义为返回结果的Intent协议一起使用。 在其他协议(例如ACTION_MAIN或ACTION_VIEW)中,您可能无法获得预期的结果。 例如,如果要启动的活动使用singleTask启动模式,则它将不会在您的任务中运行,因此您将立即收到取消结果。

public void onWindowFocusChanged(boolean hasFocus)
这是该活动是否对用户可见的最佳指标。
系统可以显示系统级窗口(例如状态栏通知面板或系统警报),它将暂时占用窗口输入焦点而不暂停前台活动。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM