防止Android Fragment在屏幕旋转时刷新活动

5
我正在开发一款Android应用程序,在其中通过点击替换片段。我为横向和纵向模式设计了不同的界面。但问题是,当我改变方向时,活动会刷新并且按钮仍然没有被点击,我尝试过采用以下方法:

android:configChanges="orientation|keyboardHidden"

但是设置为屏幕尺寸没有接受其他布局设计,此方法无效。请建议如何克服这个问题,既不刷新活动,又能接受其他布局。

3个回答

9
在API级别12以上,我们需要添加screenSize以防止刷新和方向一起出现。
android:configChanges="orientation|keyboardHidden|screenSize"

浪费了将近3个小时,都是因为没有使用“screenSize”。非常感谢。 - Shad

1
正如 Gorski 所说,onSaveInstanceStateonViewStateRestored(用于片段)是存储片段或活动状态的方法。 onSaveInstanceState:在片段暂停或停止时调用。 onViewStateRestored:当片段回来时调用。
例子:
@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);
    }

1
使用 onSaveInstanceState 存储按钮或其他状态,并在 onCreate 中使用提供的 Bundle 进行恢复。
如果您正在使用的按钮是 CompoundButton(例如 CheckBox),其状态将自动保留。

谢谢回复,你能给个例子吗?顺便说一下,我正在使用一个普通的按钮! - bharath

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接