Android 防止在方向更改时刷新活动
我正在开发一个android应用程序,在那里我可以替换点击时的片段。我有单独的景观和肖像模式的设计。但问题是,当我改变方向时,活动会刷新,按钮保持松开状态,我试着给予Android 防止在方向更改时刷新活动,android,android-fragments,screen-orientation,Android,Android Fragments,Screen Orientation,我正在开发一个android应用程序,在那里我可以替换点击时的片段。我有单独的景观和肖像模式的设计。但问题是,当我改变方向时,活动会刷新,按钮保持松开状态,我试着给予 android:configChanges="orientation|keyboardHidden" 但是没有用,设置为屏幕大小并没有考虑其他布局设计,请建议如何克服这个问题,通过在方向更改时不刷新活动,但仍接受其他布局。使用onSaveInstanceState存储按钮的状态或任何其他状态,并使用提供的包将其还原到onCrea
android:configChanges="orientation|keyboardHidden"
但是没有用,设置为屏幕大小并没有考虑其他布局设计,请建议如何克服这个问题,通过在方向更改时不刷新活动,但仍接受其他布局。使用
onSaveInstanceState
存储按钮的状态或任何其他状态,并使用提供的包将其还原到onCreate
如果您使用的按钮是CompoundButton
(如复选框
),其状态将自动为您保留。高于API级别12,我们还需要添加屏幕大小,以防止随方向一起刷新
android:configChanges="orientation|keyboardHidden|screenSize"
正如Gorski所说,onSaveInstanceState和onViewStateRestored(对于片段)是存储片段或活动状态的方法
onSaveInstanceState:在片段暂停或停止时调用
onViewStateRestored:在片段恢复时调用
例:
谢谢你的回复,你能举个例子吗??我正在使用一个正常的按钮顺便说一句!因为没有使用“屏幕大小”浪费了近3个小时。谢谢。
@Override
public void onSaveInstanceState(@NonNull Bundle outState) {
outState.putParcelableArrayList(Keys.CURRENT_OPERATIONS.name(), operations);
firstCall = true;
super.onSaveInstanceState(outState);
}
@Override
public void onViewStateRestored(@Nullable Bundle savedInstanceState) {
if (firstCall)
operations = savedInstanceState.getParcelableArrayList(Keys.CURRENT_OPERATIONS.name());
super.onViewStateRestored(savedInstanceState);
}