当键盘弹出或消失时,我不希望我的活动被销毁,所以我在android清单中添加了相应的xml属性;即android:configChanges="keyboard|keyboardHidden
。在the android documentation中它说:
您可以声明您的活动处理配置更改本身,这会阻止系统重新启动您的活动....要声明您的活动处理配置更改,请编辑清单文件中的相应元素以包含android: configChanges属性,其值表示您要处理的配置。
但是,似乎活动中的视图状态仍然保存,然后在显示键盘时恢复。原因如下:
在此特定片段中,当键盘弹出时,表示用户即将进行搜索。当执行该搜索时,接收到新的Item
个对象,删除片段的recyclerview适配器中的任何旧Item
对象,添加新的notifyDataSetChanged()
对象{{1}调用 - 应该触发视图显示新项目。
相反,结果是收到结果,从适配器中删除任何先前搜索的结果,添加新结果,但视图符号会发生一些有趣的事情。有时候他们甚至不会改变,有时候他们会像瞬间改变一样,但是在那次瞬间改变之前,他们会恢复原状。
我知道,默认情况下,只要活动因配置更改而被销毁,android就会将视图状态保存在活动的视图层次结构中,然后在onRestoreInstanceState()
中恢复该已保存状态。这似乎发生在这里:
视图符号在键盘弹出之前反映特定项目,当键盘弹出时保存视图的状态,然后当用户完成输入搜索并执行它时,接收项目,删除旧项目,添加新项目,调用notifyDataSetChanged()
- 暂时显示新项目 - 然后隐藏键盘并调用onRestoreInstanceState()
,将视图恢复为他们显示的内容键盘弹出之前。
如果键盘出现故障时状态正在恢复,为什么我在清单中为相应的活动设置了android:configChanges="keyboard|keyboardHidden
属性?