我有三个活动ActivityA,ActivityB和ActivityC。

假设在ActivityA中,有一些类似...的代码

if(someCondition()){
gotoActivityB();
}
else{
gotoActivityC();
}


现在,如果用户转到ActivityB,则ActivityA不应该完成。

如果他去ActivityC,应该完成。

在清单文件中添加noHistory无效。

另外,如果条件不起作用,请输入finish(),因为在ActivityC之后有许多活动,其中ActivityA应该在后台。

我不想在这些活动startActivity(context,ActivityA.class)中调用onBackPressed(),因为它将再次在ActivityA中执行onCreate()的代码。

那么,有没有一种方法,当用户按下ActivityB中的“后退”按钮时,我可以从堆栈中删除ActivityA?

可能是这样的:

ActivityB.this.finish();
ActivityA.finish(); //some code to finish ActivityA

最佳答案

好的,这是实现目标的一种方法。您需要将Activity上下文传递到所需的任何地方,以便在其上调用finish()。我使用Application类来做到这一点。为了节省时间,我只使用了两个类,但是对于您的目的它应该可以正常工作。这是我的做法:

这是头等舱。我们要从另一个活动关闭该活动。

public class MainActivity extends Activity implements OnClickListener {
private Button button;
// application instance
private MainApplication mainApplication;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mainApplication = (MainApplication) getApplicationContext();
    // set the Activity's context for later usage.  Doing this determines which
    // Activity can be closed from another Activity.
    mainApplication.setActivityContext(this);

    button = (Button) findViewById(R.id.button1);
    button.setOnClickListener(this);
}

public void onClick(View v) {
    switch (v.getId()) {
    case R.id.button1:
        Intent i = new Intent(this, SecondActivity.class);
        startActivity(i);
        break;
    }
}
}


这是第二个活动。退出它也会导致在第一个类上调用finish():

public class SecondActivity extends Activity {

private Activity activityContext;
private MainApplication mainApplication;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.second_activity_layout);

    mainApplication = (MainApplication) getApplicationContext();
    // get the Activity context you stored in the MainApplication class
    // so you can call finish on it.
    activityContext = mainApplication.getActivityContext();
}

@Override
protected void onPause() {
    super.onPause();
    // closes your defined Activity.  If you press the back button you will find
    // that you exit right out of the app as the other Activity gets popped off
    // the stack.
    activityContext.finish();
}
}


和Application类:

public class MainApplication extends Application {

private Activity activityContext;

public Activity getActivityContext() {
    return activityContext;
}

public void setActivityContext(Activity activityContext) {
    this.activityContext = activityContext;
}

}


当然,请确保在AndroidManifest中声明MainApplication类:

<application
    android:name=".MainApplication"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >


这是一种简单的方法。可能有更好的方法。但是无论如何,您都必须传递要调用finish()的Activity的上下文。然后,您可以从任何地方关闭它。

关于android - 从堆栈中删除 Activity ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11624558/

10-08 20:36