我使用来自v7
的RecyclerView
、SearchView
和Filterable
类来实现了一个控件。现在有一个让人烦恼的问题,每当键盘打开或关闭时,RecyclerView
的内容就会消失。计数仍然正确,但是视图为空。我猜测这可能与Layout
大小的改变有关。这种情况正常吗?是否有问题?如何处理?我可以展示代码,但不确定哪一部分是相关的,请告诉我该添加什么?
我使用来自v7
的RecyclerView
、SearchView
和Filterable
类来实现了一个控件。现在有一个让人烦恼的问题,每当键盘打开或关闭时,RecyclerView
的内容就会消失。计数仍然正确,但是视图为空。我猜测这可能与Layout
大小的改变有关。这种情况正常吗?是否有问题?如何处理?我可以展示代码,但不确定哪一部分是相关的,请告诉我该添加什么?
在输入问题时,从类似的问题中找到了这篇文章。
请在清单文件的活动中添加以下一行。希望它可以解决问题。android:windowSoftInputMode="adjustPan"
更确切地说,在键盘将要打开的activity
标签中的AndroidManifest.xml
中添加android:windowSoftInputMode="adjustPan"
。
例子:
<activity
android:name=".FManagerActivity"
android:label="@string/app_name"
android:windowSoftInputMode="adjustPan"
android:theme="@style/AppTheme.Light.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
它基本上是指当键盘打开或关闭时,活动(activity)作出的反应行为。adjustPan
告诉键盘覆盖活动视图而不干扰其内容。如果不使用该选项,则在打开键盘时,活动的大小也会发生变化,这会使内容消失,因为在隐式操作期间和之后没有调用notifyDatasetChanged()
。
不太确定为什么,但将其设置为SOFT_INPUT_ADJUST_RESIZE对我解决了问题:
activity?.window?.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE)
SOFT_INPUT_ADJUST_RESIZE
会改变活动大小,这将导致活动的重新创建(除非使用android:configChanges =“screenSize”
手动处理)。您必须在onCreate
中保存活动状态并进行保留。 - priyank