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

时间:2013-03-23 01:58:28

标签: java android android-alertdialog back

在给定的活动中,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);
         }
     });

3 个答案:

答案 0 :(得分:1)

班级成员

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;
    }
}

答案 1 :(得分:1)

您可以Override调用onResume()的{​​{1}}方法。一旦用户按下“后退”Activitybutton方法肯定会被调用,因此您应该可以将方法调用放在此处

答案 2 :(得分:0)

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)
  这是用户是否可以看到此活动的最佳指标   系统可以显示系统级窗口(例如状态栏通知面板或系统警报),这些窗口将临时占用窗口输入焦点而不会暂停前台活动。