ListView与EditText键盘问题



在我的应用程序中,我有一个活动,它包含一个片段,其中包含一个ListView与各种edittext,像这样:

Activity -> Fragment -> ListView -> EditTexts

当点击EditText时,显示软键盘,并发生两种情况之一:

  • 如果活动还没有失去焦点(通过访问Android主屏幕,例如),整个活动稍微向上滑动,以便EditText不被键盘遮挡。

  • 如果Activity在某个点失去焦点(再次,例如访问Android主屏幕),ListView将EditText滚动到键盘上方(Activity保持静止),但是EditText失去焦点!

这两个结果都不理想。理想情况下,我总是希望ListView在键盘上方滚动EditText,而不让EditText失去焦点。谁能给我指出正确的方向和/或解释为什么我现在看到两个不同的行为对于相同的行动?

编辑:作为参考,我正在为Android 4.2构建并在Nexus 7平板电脑上测试。

问题是,当您在ListView行中使用EditText时,您的ListView可能会被重新绘制以为键盘腾出空间。当你重新绘制ListView时,系统不记得光标之前在哪里。

如果你在ScrollView中使用LinearLayout,同样的问题似乎不会发生而不是ListView。

最近我也遇到了这个问题,我通过在androidmanifest .xml中添加android:windowSoftInputMode="adjustPan"来解决这个问题。这不会导致listview重画,因此edittext不会失去焦点。