3

如何处理取向事件发生的所有状态?处理方向变化的状态

喜欢的东西:

  • 开始(节省一些屏幕状态)
  • 发生时
  • (动画目的)
  • 它发生前后(加载屏幕状态)

我知道即onConfigurationChanged可以处理方向更改。我试过这个:

public void onConfigurationChanged(Configuration cfg) { 
     saveState(); 

     super.onConfigurationChanged(cfg); 

     loadState(); 
    } 

在saveState上,我在SharedPreferences上存储在Gallery上查看的lastIndex。 在loadState上,我从SharedPreferences获取lastIndex,并将其设置为Gallery上的当前值。

我试着也把在LoadState中的onResume方法,但发生方向改变后它不叫。

回答

4

开始之前(节省一些屏幕状态)

使用onSaveInstanceState()和/或onRetainNonConfigurationInstance()上已发生(动画目的)时叫setRetainInstance(true)

和/或一个片段

这是由操作系统来处理。

它发生后(加载屏幕状态)

使用onRestoreInstanceState()和/或getLastNonConfigurationInstance()(如果你去的片段路线,您的数据是天生就仍然存在)

我知道onConfigurationChanged可以处理方向更改。

@EightEight's answer涵盖了这个很好。

3

您可能有点困惑。

这是从api docs

公共无效onConfigurationChanged当设备配置更改,而您的活动运行由系统调用(配置NEWCONFIG)。请注意,只有在您选择的配置中您想要使用清单中的configChanges属性进行处理时才会调用它。

如果您在AndroidManifest中指定了参数,系统会通过调用onConfigurationChanged()来通知您方向更改。如果你没有设置标志,那么Android会以适当的方向开始一个新的活动,然后致电onResume()

如果您想在活动结束取向改变,并且都制定了通知,我会建议在您的孩子一个视图覆盖的的onDraw()方法。那么一切都完成了,你可以从方向改变之前恢复状态。

HTH。

相关问题