如何在屏幕旋转期间保存/恢复(更新)参考对话框?(我需要参考onCreate活动方法。)

时间:2013-01-17 07:26:30

标签: android dialog screen-rotation

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

但onCreateDialog在onCreate之后运行。

1 个答案:

答案 0 :(得分: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标志会告诉您可靠。因此,您可以根据此信息取消/分离任务或充分处理其他资源。

修改:请注意如果 onDestroy()被称为,那么您可以依赖isConfigChange标志。此外,如果 Android正在处理配置更改,那么将调用 onDestroy() 。但是,如果 Android即将结束您的活动,那么对onDestroy()的调用是可选,因为Android认为您的活动在调用onPause()后立即被激活(蜂窝前)或onStop()(蜂窝及以后)。这不是问题,因为如果你的活动将被杀死,你的众多物品的状态对任何人都不再有意思了。但是,如果您想要友好,那么就决定将哪些内容放入onPause()onStop()时,这是另一个需要考虑的方面。

希望这有帮助。