Android ListView中带有EditText的奇怪软键盘行为

Android ListView中带有EditText的奇怪软键盘行为,android,android-listview,Android,Android Listview,我有一个充满编辑文本的列表视图。它们在开始时不可聚焦,但用户可能会在长时间单击ListView项(对应的ListView)后进入“编辑模式”。 第一件奇怪的事情是当第一次长时间的点击发生时。EditText获得焦点,但键盘不显示。需要点击EditText以使其最终显示。之后长时间单击另一个列表项时,将显示键盘。我观察到的内部行为的唯一区别是,在第一种情况下,onClick事件不会触发EditText,而在第二种情况下,它会触发EditText 但最令人沮丧的事情发生在我编辑几个项目时,在这里和那

我有一个充满编辑文本的列表视图。它们在开始时不可聚焦,但用户可能会在长时间单击ListView项(对应的ListView)后进入“编辑模式”。 第一件奇怪的事情是当第一次长时间的点击发生时。EditText获得焦点,但键盘不显示。需要点击EditText以使其最终显示。之后长时间单击另一个列表项时,将显示键盘。我观察到的内部行为的唯一区别是,在第一种情况下,onClick事件不会触发EditText,而在第二种情况下,它会触发EditText

但最令人沮丧的事情发生在我编辑几个项目时,在这里和那里滚动,再编辑几个项目,突然我在一个集中的编辑文本中结束,没有显示键盘,也没有任何方法在编辑文本中再次打开键盘,点击没有帮助。 我在apadter中尽量小心,保存EditText状态并在getView方法中的ListView适配器中重新创建它


对如何调试这些东西有什么建议吗?也许有人可以解释键盘决定如何显示,以及如果可能的话如何调试此事件。

我在这里找到了一个关于requestFocus()调用的非常好的解释: 简单地说:当您调用requestFocus()时(或者由于布局中的xml设置而调用它),而整个视图树尚未布局时,您的视图会认为它有焦点,但实际上可能没有。
一种解决方案是在布局完成后,在视图或其父视图上调用post(Runnable)请求焦点。

我在
列表视图中使用
editText
遇到了很多麻烦。视图回收事件对焦点和关键侦听器造成了严重破坏。我接着使用了
滚动视图
,虽然并不完美,但效果要好得多。希望你不必添加数千个项目,那么scrollview方法就不起作用了。我已经在考虑
scrollview
,因为你完全正确-焦点和键盘都会受到严重破坏。我不打算有数百个条目,但我需要从sqlite db读取并保存条目。使用ScrollView的最佳方式是什么?我只是将所需的文本视图和编辑文本手动添加到ScrollView中的线性布局中。这有点奇怪,因为我有一个循环调用getView()的适配器,还有一个支持它的模型,但归根结底,它只是调用
addView()