android - RecyclerView View 中的 EditText 在键盘打开时分离

标签 android android-edittext android-recyclerview

我正在尝试在 RecyclerView 中创建具有可变数量的 EditText 元素的长表单。布局由 FrameLayout、表单部分的 RecyclerView 和 CardView 内的嵌套 RecyclerView 组成,用于保存该部分的所有表单元素(参见下面的动画)。

通常,当一个元素获得焦点时,键盘会出现,窗口会调整大小,并且 View 会滚动以使元素出现在键盘上方。我遇到的问题是,当在屏幕底部和部分顶部选择一个元素时,窗口会调整大小,并且 RecyclerView 会分离该部分的 View ,导致 EditText 在尝试聚焦时不存在。这表现为键盘突然打开,然后在焦点返回到 FrameLayout 时关闭。

RecyclerView Focus Issue

我正在使用 android:windowSoftInputMode="adjustResize"在我的 Activity 中,不想使用 adjustPan因为它没有提供最好的用户体验。

我尝试向 EditText 添加一个单击监听器,然后向上滚动 RecyclerView 以便在调整窗口大小时 View 不会被破坏,但这感觉很糟糕,并且很难准确检测 RecyclerView 应该滚动多远。你也会得到一些奇怪的跳跃。为此,您必须关闭 EditText 的可聚焦性,这也不理想,因为它破坏了导航和可访问性。

尝试做类似 recyclerView.getRecycledViewPool().setMaxRecycledViews(0, SECTION_COUNT); 的事情也不起作用,因为它不会阻止 View 被分离。

当为键盘调整窗口大小以使 EditText 获得焦点时,如何防止 View 分离?

最佳答案

我解决了这个问题

android.os.Handler().postDelayed({recycle.smoothScrollToPosition(0)},100)

关于android - RecyclerView View 中的 EditText 在键盘打开时分离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44338543/

相关文章:

java - 如何围绕 <Array> 矩形绘制矩形

android - 使用mysql数据库在远程服务器上托管Wcf服务并在Android中使用它

安卓编辑文本 : Get LineCount in an Activity's onCreate()

firebase - 使用FirebaseUI将Firestore存储到recyclerview中,没有显示数据

android - 为什么实际的字符串没有显示在 recyclerView 中?

android - 在哪里可以找到 Xamarin Android 在 Visual Studio 中创建的 keystore 的默认位置?

java - Android 蓝牙 LE 屏蔽 UUID 过滤器

Android:为什么当我膨胀资源布局文件时我的用户界面没有被绘制?

Android - 使用自定义 ArrayAdapter 获取 ListView 的每个 EditTexts 值

android - 如何在 Android 中禁用 RecyclerView 项目?