Android 防止在方向更改时刷新活动

Android 防止在方向更改时刷新活动,android,android-fragments,screen-orientation,Android,Android Fragments,Screen Orientation,我正在开发一个android应用程序,在那里我可以替换点击时的片段。我有单独的景观和肖像模式的设计。但问题是,当我改变方向时,活动会刷新,按钮保持松开状态,我试着给予 android:configChanges="orientation|keyboardHidden" 但是没有用,设置为屏幕大小并没有考虑其他布局设计,请建议如何克服这个问题,通过在方向更改时不刷新活动,但仍接受其他布局。使用onSaveInstanceState存储按钮的状态或任何其他状态,并使用提供的包将其还原到onCrea

我正在开发一个android应用程序,在那里我可以替换点击时的片段。我有单独的景观和肖像模式的设计。但问题是,当我改变方向时,活动会刷新,按钮保持松开状态,我试着给予

android:configChanges="orientation|keyboardHidden"

但是没有用,设置为屏幕大小并没有考虑其他布局设计,请建议如何克服这个问题,通过在方向更改时不刷新活动,但仍接受其他布局。

使用
onSaveInstanceState
存储按钮的状态或任何其他状态,并使用提供的
包将其还原到
onCreate


如果您使用的按钮是
CompoundButton
(如
复选框
),其状态将自动为您保留。

高于API级别12,我们还需要添加屏幕大小,以防止随方向一起刷新

android:configChanges="orientation|keyboardHidden|screenSize"
正如Gorski所说,onSaveInstanceStateonViewStateRestored(对于片段)是存储片段或活动状态的方法

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);
    }