0
protected Dialog onCreateDialog(int id) {
...
AlertDialog.Builder adb = new AlertDialog.Builder(this);
...
mydialog = adb.create();
...
}

ただし、onCreateDialogはonCreateの後に実行されます。

4

1 に答える 1

2

下位互換性が必要な場合は、次のようにします。

class MyActivity extends Activity {
  protected static final class MyNonConfig {
    // fill with public variables keeping references and other state info, set to null
  }
  private boolean isConfigChange;
  private MyNonConfig nonConf;
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.my_layout);
    nonConf = (MyNonConfig)getLastNonConfigurationInstance();
    if (nonConf == null) { nonConf = new NonConfig(); }
    // handle the information of the nonConf objects/variables
    ...
  }
  @Override
  protected void onStop() {
    super.onStop();
    isConfigChange = false;
  }
  @Override
  public Object onRetainNonConfigurationInstance() {
    isConfigChange = true;
    return nonConf;
  }
  @Override
  protected void onDestroy() {
    super.onDestroy();
    // handle objects in nonConf, potentially based on isConfigChange flag
    ...
  }

nonConfオブジェクトは、すべての構成変更に耐えます(ただし、アプリの実際の停止には耐えられません)。また、isConfigChangeフラグは、アクティビティがすぐに再作成されるかどうかを確実に示します。したがって、この情報に基づいて、タスクをキャンセル/デタッチしたり、他のリソースを適切に処理したりできます。

編集:が呼び出された場合はフラグ に依存できることに注意してください。また、Androidが構成変更を処理している場合が呼び出されます。ただし、 Androidがアクティビティを終了しようとしている場合、onDestroy()の呼び出しはオプションです。これは、Androidが(Honeycomb以前)または(Honeycomb以降)を呼び出した直後にアクティビティを強制終了できると見なすためです。ただし、これは問題ではありません。アクティビティが強制終了される場合、多数のオブジェクトの状態は誰にとっても興味深いものではなくなるからです。ただし、友好的になりたい場合、これは何を入れるかを決定する際に考慮すべきもう1つの側面です。onDestroy()isConfigChange onDestroy() onPause()onStop()onPause()およびonStop()

お役に立てれば。

于 2013-01-17T07:46:48.763 に答える