3

詳しく説明させてください。

初めに; ユーザーが押し戻して前のアクティビティを返すと、前のアクティビティがonResumeメソッドを適切にトリガーすることを私は知っています。これは大丈夫です。

私のアプリケーションにはルート アクティビティがあり、ボタンを介して 4 つの異なるアクティビティを指示しています。ユーザーが戻るボタンを押したのはどのアクティビティですか? のようなものを使用することは可能Handlerですか?

実際、私は緑豊かな解決策を見つけました。4 つの異なる静的ブール変数があり、それぞれが 1 つのアクティビティを表します。コードで示してみましょう:

public class MainActivity extends Activity { // This is root

    static Boolean activityA;
    static Boolean activityB;
    static Boolean activityC;
    static Boolean activityD;

    public void onClick(View v) {
        if(v == ActivitvyA) //of course psuedo 
             activityA = true
        //...there are similar controls
    }

    protected void onResume() {
        if(activitiyA) // If true, this means the user pressed back on ActivityA
    }

}

どう思いますか?別の効果的な方法はありますか?

どんな助けでも素晴らしいでしょう。

4

2 に答える 2

6

基本的に、ユーザーがルート アクティビティに到達したときに、ユーザーがどのアクティビティから来ているかを知りたいとします。

この種の情報を伝える最善の方法は、 を使用してお子様のアクティビティを開始することstartActivityForResultです。

public static final int CODE_A = 10;
public static final int CODE_B = 20;

public void goToA() {
  Intent i = new Intent(this,AActivity.class);
  startActivityForResult(i, CODE_A);
}

public void goToB() {
  Intent i = new Intent(this,BActivity.class);
  startActivityForResult(i, CODE_B);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  if(resultCode==CODE_A) {
    // ...
  }
  else if(resultCode==CODE_B) {
    // ...
  }
}

これを行う別の方法は、ユーザーに表示されていた最後のアクティビティをどこかに (たとえば、カスタム Application クラスに) 保存し、各アクティビティの onPause メソッドで更新することです。何かのようなもの:

class MyApplication extends android.app.Application {
  public Class latestActivity;
}

class MyBaseActivity extends Activity {
  public void onPause() {
    ((MyApplication)getApplication()).latestActivity = this.getClass();
    super.onPause();
  }
}

最後の方法は、起動したばかりのアクティビティをルート アクティビティに保存することです。

class MyRootActivity extends Activity {
  private String latestUserAction;

  public void goToA() {
    latestUserAction = "goToA";
    startActivity(Intent.ACTION_VIEW, .........
  }

  // Don't forget to check that latestUserAction gets saved and restored when your activity is paused or stopped.
}
于 2012-07-26T13:03:51.510 に答える
3

アクティビティを開くときは、次に..結果としてアクティビティ名を設定することで、アクティビティをstartActivityForResult(intent, requestCode)上書きできます..onBackPressed()

@Override
public void onBackPressed() {
    super.onBackPressed();
    setResult(ActivityName);
}

その後、あなたのMainActivityチェックで結果が合格しました..

于 2012-07-26T12:52:10.957 に答える