我有三个活动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
答案 0 :(得分:1)
您好,您可以根据条件在当前活动中完成您的活动。或者根据您可以完成活动的结果使用StartActivityforResult。
希望这会对你有所帮助。
答案 1 :(得分:1)
好的,这是您实现目标的一种方式。您需要将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" >
这是一种做到这一点的hacky方式。可能有更好的方法。但无论如何,您必须传递要调用finish()的Activity的上下文。然后你可以从任何地方关闭它。
答案 2 :(得分:1)
你可以像我一样以另一种方式尝试这个。
在开头创建活动的静态实例变量。
private static Activity1 thisAct = null; // Activity1 is name of class
现在在onCreate()
方法
thisAct = this;
创建一个完成此活动的静态方法
public static void finishActivity()
{
thisAct.finish();
}
答案 3 :(得分:-1)
转到活动C时,清除FLAG:
Intent cIntent = new Intent(view.getContext(), cActivity.class).setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(cIntent);