Android:如何专门处理Back Press?

Mar*_*tin 3 android

让我解释一下细节.

首先; 我知道如果用户按下并返回上一个活动,则前一个活动会onResume正确触发方法.这没关系.

我的应用程序中有一个根活动,它通过按钮指导4个不同的活动.我想学习,用户按哪个活动按下按钮?是否可以使用类似Handler或类似的东西?

实际上,我已经找到了一个解决方案.我有4个不同的静态布尔变量,每个变量代表一个Activity.让我在代码中显示:

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
    }

}
Run Code Online (Sandbox Code Playgroud)

你怎么看?有什么不同和有效的方式吗?

任何帮助都会很棒.

Vin*_*rat 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) {
    // ...
  }
}
Run Code Online (Sandbox Code Playgroud)

另一种方法是将某个地方(例如在自定义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();
  }
}
Run Code Online (Sandbox Code Playgroud)

最后一种方法是在您的根活动中存储您刚刚启动的活动.

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.
}
Run Code Online (Sandbox Code Playgroud)