finish()を呼び出すとアクティビティの再作成が停止すると思われるため、この動作が正常かどうかはわかりません。
アクティビティクラスの抜粋は次のとおりです。
public class MyActivity extends FragmentActivity {
private RetainFragment retainFragment;
@Override
protected void onCreate(Bundle savedInstanceState) {
......
retainFragment = getSupportFragmentManager().findFragmentByTag("RetainFragment");
if(retainFragment == null) {
retainFragment = new RetainFragment();
getSupportFragmentManager().beginTransaction().add(retainFragment, "RetainFragment").commitAllowingStateLoss();
}
if(retainFragment.isFinish) {
Log.v("MyActivity", "isFinish == true");
this.finish();
}
}
// a on-click event handler for a finish button
public void onFinishClicked(View view) {
retainFragment.isFinish = true;
this.finish();
}
private class RetainFragment extends Fragment {
private boolean isFinish = false;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setRetainInstance(true);
}
}
}
アクティビティは永続的であり(他の永続変数もRetainFragmentに保存しますが、表示しませんでした)、ユーザーが終了ボタンをクリックした後にのみ閉じられます。この時点でonFinishClicked(View)が呼び出され、アクティビティが呼び出されます。システムによって終了する必要があります。画面を同時に回転させた後、システムによって再作成されるとは思いません。これはめったに発生しないので、onCreate()メソッド内でfinish()を再度呼び出すことで処理します。ただし、ここでは、終了したアクティビティが永久に停止することになっているため、かなり醜いように見えます。これを明示的に処理する必要があります。:(アクティビティのライフサイクルまたは私の側の保持フラグメントの誤解はありますか?