我在典型的登录屏幕中有两个编辑文本。即使屏幕旋转,编辑文本也会保留用户输入。
在屏幕旋转时,如果不覆盖onSaveInstanceState()
方法并且不更新onCreate()
中的编辑文字文本,编辑文本如何保留文字?
另外,我还没有在我的清单中设置android:configChanges="orientation"
。
我记得旧版本的情况并非如此。 API中是否有更改,而onSaveInstanceState()
在较新版本中无关紧要(我的意思是操作系统会自动保留状态)?
如果是这种情况,是否有人可以指导我参考官方文档或官方博客文章,详细提及此问题?
无线电组内的单选按钮,复选框,搜索栏和开关也是这种情况。
答案 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"
你的状态不会得救。