即使我已将活动配置为处理配置更改

时间:2016-08-31 16:39:15

标签: android android-fragments android-recyclerview

当键盘弹出或消失时,我不希望我的活动被销毁,所以我在android清单中添加了相应的xml属性;即android:configChanges="keyboard|keyboardHidden。在the android documentation中它说:

  

您可以声明您的活动处理配置更改本身,这会阻止系统重新启动您的活动....要声明您的活动处理配置更改,请编辑清单文件中的相应元素以包含android: configChanges属性,其值表示您要处理的配置。

但是,似乎活动中的视图状态仍然保存,然后在显示键盘时恢复。原因如下:

在此特定片段中,当键盘弹出时,表示用户即将进行搜索。当执行该搜索时,接收到新的Item个对象,删除片段的recyclerview适配器中的任何旧Item对象,添加新的notifyDataSetChanged()对象{{1}调用 - 应该触发视图显示新项目。

相反,结果是收到结果,从适配器中删除任何先前搜索的结果,添加新结果,但视图符号会发生一些有趣的事情。有时候他们甚至不会改变,有时候他们会像瞬间改变一样,但是在那次瞬间改变之前,他们会恢复原状。

我知道,默认情况下,只要活动因配置更改而被销毁,android就会将视图状态保存在活动的视图层次结构中,然后在onRestoreInstanceState()中恢复该已保存状态。这似乎发生在这里:

视图符号在键盘弹出之前反映特定项目,当键盘弹出时保存视图的状态,然后当用户完成输入搜索并执行它时,接收项目,删除旧项目,添加新项目,调用notifyDataSetChanged() - 暂时显示新项目 - 然后隐藏键盘并调用onRestoreInstanceState(),将视图恢复为他们显示的内容键盘弹出之前。

如果键盘出现故障时状态正在恢复,为什么我在清单中为相应的活动设置了android:configChanges="keyboard|keyboardHidden属性?

0 个答案:

没有答案