旋转屏幕时,EditText数据不会丢失

时间:2017-09-21 07:37:10

标签: android

我在典型的登录屏幕中有两个编辑文本。即使屏幕旋转,编辑文本也会保留用户输入。

在屏幕旋转时,如果不覆盖onSaveInstanceState()方法并且不更新onCreate()中的编辑文字文本,编辑文本如何保留文字?

另外,我还没有在我的清单中设置android:configChanges="orientation"

我记得旧版本的情况并非如此。 API中是否有更改,而onSaveInstanceState()在较新版本中无关紧要(我的意思是操作系统会自动保留状态)?

如果是这种情况,是否有人可以指导我参考官方文档或官方博客文章,详细提及此问题?

无线电组内的单选按钮,复选框,搜索栏和开关也是这种情况。

2 个答案:

答案 0 :(得分:0)

你在xml中提到你的id的android视图会保留它们的状态。

尝试删除id并检查,状态将不会被维护! :)

onSaveInstanceState类中的Activity执行一些重要操作,它不是无操作方法。这就是为什么你必须在重写方法时调用super

查看this文章了解详情。

引用上述链接文章中最相关的段落:

  

要保存状态,Activity会遍历布局层次结构,对于遇到的每个视图,它会调用View.saveHierarchyState(),而View.dispatchSaveInstanceState()会调用View.onSaveInstanceState()

     

如果视图具有ID ,则此方法会调用Parcelable,这会将其状态保存到View.dispatchSaveInstanceState()对象并将其返回。 Parcelable然后使用import junit.framework.Assert; import mockit.Mock; import mockit.MockUp; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.junit.Test; public class XXXTest { class MyLog implements Log { public static final String INFO = "info"; private String logLevel; private Object logContent; public String getLogLevel() { return logLevel; } public Object getLogContent() { return logContent; } @Override public void info(Object o) { logLevel = "info"; logContent = o; } //Implement other methods } @Test public void testXXXFunction() { final MyLog log = new MyLog(); new MockUp<LogFactory>() { @Mock public Log getLog(String name) { return log; } }; //invoke function and log by MyLog FunctionToBeTest.invoke(); Assert.assertEquals("expected log text", log.getLogContent()); } } 并使用视图的ID将其保存到共享的持久数据中。

答案 1 :(得分:0)

尝试在 xml

中使用此代码
android:saveEnabled="false"

你的状态不会得救。