さて、これが目標を達成するための 1 つの方法です。Activity コンテキストを必要な場所に渡して、finish() を呼び出す必要があります。これを行うには Application クラスを使用しました。時間のために 2 つのクラスだけを使用しましたが、目的には問題なく機能するはずです。これが私がやった方法です:
これは最初のクラスです。別のアクティビティから閉じたいのはアクティビティです。
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();
}
}
そしてアプリケーションクラス:
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() を呼び出したいアクティビティのコンテキストを渡す必要があります。その後、どこからでも閉じることができます。