0

特定のアクティビティで、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);
         }
     });
4

3 に答える 3

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;
    }
}
于 2013-03-23T02:07:07.313 に答える
1

呼び出しOverrideの方法ができます。ユーザーが「戻る」を押すとすぐに、メソッドが確実に呼び出されるので、ここにメソッド呼び出しを配置できるはずですonResume()ActivitybuttononResume()

于 2013-03-23T02:10:08.110 に答える
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 (インテント インテント、int requestCode、バンドル オプション)
このメソッドは、結果を返すように定義されたインテント プロトコルでのみ使用する必要があることに注意してください。他のプロトコル (ACTION_MAIN や ACTION_VIEW など) では、期待どおりの結果が得られない場合があります。たとえば、起動しようとしているアクティビティが singleTask 起動モードを使用している場合、そのアクティビティはタスクで実行されないため、すぐにキャンセル結果が返されます。

public void onWindowFocusChanged (boolean hasFocus)
これは、このアクティビティがユーザーに表示されるかどうかを示す最良の指標です。
システムはシステム レベルのウィンドウ (ステータス バー通知パネルやシステム アラートなど) を表示する場合があり、フォアグラウンド アクティビティを一時停止することなく一時的にウィンドウ入力フォーカスを取得します。

于 2013-03-23T02:01:16.403 に答える