Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在屏幕旋转/活动破坏后在Android中保留数据视图/布局_Java_Android_Android Activity_Screen Rotation - Fatal编程技术网

Java 在屏幕旋转/活动破坏后在Android中保留数据视图/布局

Java 在屏幕旋转/活动破坏后在Android中保留数据视图/布局,java,android,android-activity,screen-rotation,Java,Android,Android Activity,Screen Rotation,当用户的设备旋转时,活动会被销毁并重新创建,对此我有点困惑 我一直在阅读,我理解这样做的理由(它基本上“强制”开发人员确保他们在轮换/语言/其他更改时没有“遗漏”任何内容) 我很高兴尊重最佳实践,如果它被认为是这样的话,但是它回避了一个问题: 我如何“记住”游戏/应用程序的状态,以便当屏幕旋转时,我可以从中重新生成用户正在观看的内容? 从我所看到的,绝对所有的东西都被破坏了,基类构造函数运行,而活动中的所有变量都是“null” 我怀疑“savedInstanceState”(Bundle类)是我

当用户的设备旋转时,
活动
会被销毁并重新创建,对此我有点困惑

我一直在阅读,我理解这样做的理由(它基本上“强制”开发人员确保他们在轮换/语言/其他更改时没有“遗漏”任何内容)

我很高兴尊重最佳实践,如果它被认为是这样的话,但是它回避了一个问题:

我如何“记住”游戏/应用程序的状态,以便当屏幕旋转时,我可以从中重新生成用户正在观看的内容?

从我所看到的,绝对所有的东西都被破坏了,基类构造函数运行,而
活动
中的所有变量都是“null”

我怀疑“savedInstanceState”(
Bundle
类)是我收集数据的地方,但阅读它似乎只在应用程序因资源不足而关闭时使用(以及一些其他极端边缘情况)

我是否误解了savedInstanceState的目的?如果我足够注意轮换时不会错过任何东西,那么放弃最佳实践(让
活动
被销毁)是否明智?提前谢谢你的建议


我应该注意,这个问题适用于游戏编程(我没有使用布局XML)

是否需要重新创建活动?你想轮换吗?SaveDestChanStand是将要传递给活动的数据存储的地方,但是由于您不使用XML布局,您可以考虑只在Android中添加Android:配置更改=“定位”到清单中的活动。这将使您可以手动控制旋转变化期间发生的情况

除了我最初的评论之外,我还将覆盖正在显示的键盘的配置更改:

android:configChanges="orientation|keyboardHidden"
如果要对旋转更改进行操作,您可以覆盖
onConfigChange
并在那里执行任何需要的操作


很难说你应该总是覆盖配置更改,但我经常在不依赖于特定于大小或方向的资源文件夹的情况下这样做,并且我正在做大量的工作,这些工作需要花费太多的时间来重新创建。

在活动配置更改时,还有其他最佳做法来存储数据。


<,这将回答您关于配置更改和存储数据的所有问题

导入: 用于存储数据的片段文件。您必须设置
setRetainInstance(true)
,以便在活动配置更改时存储和检索数据

@Override 
   public void onCreate(Bundle savedInstanceState) {  
          super.onCreate(savedInstanceState);        
          // retain this fragment
          setRetainInstance(true);    
    }

最佳实践并不总是最佳的。。是否要重新创建活动?你想轮换吗?SaveDestChanStand是将要传递给活动的数据存储的地方,但是由于您不使用XML布局,您可以考虑只添加“代码> Android:配置更改=“定位”< /代码>到清单中的活动。这将使您可以手动控制旋转更改期间发生的情况。是否要重新创建
活动
?如果我能避免的话,也不会。除了更新游戏UI以使其适应横向/纵向(如果活动没有被破坏,这将是必要的)之外,我不想在轮换方面做任何工作。公平地说,不使用XML布局(直接绘制到画布上)的游戏通常应该使用
android:configChanges=“orientation”
方法吗?嗨,贾斯汀。我现在用的是你的解决方案,效果很好。我认为你提供了正确的答案,给你打分是公平的。请将你的评论(或类似的)作为答案发表,我会给你打分,以确保正确:)发表,并附上一些其他评论谢谢。事实上,我预计在使用画布布局时,会有很多关于使应用程序自适应的工作,所以这很好。从我所读到的内容来看,一般来说,覆盖方向的configChanges是个坏主意,但该应用程序现在运行良好,再次感谢!