2012-01-30 70 views
0

我有一个ListView填充EditTexts。它们在开始时没有关注,但用户可以在长时间点击ListView项目(相应的ListView)后进入“编辑模式”。 第一个奇怪的事情是当第一次长按发生时。 EditText获得焦点,但键盘不出现。需要点击EditText才能最终显示。在此之后,长按其他列表项时,键盘出现。我设法观察到的内部行为的唯一区别在于,在第一种情况下,onClick事件不会触发EditText,而在第二种情况下它会触发EditText。列表视图与EditTexts奇怪的软键盘行为

但是最令人沮丧的事情发生在某些时候,当我编辑一些项目时,滚动到这里和那里,编辑更多,然后突然间我没有显示任何键盘而突然出现在聚焦的EditText中,并且没有任何方法让键盘再次启动在那个EditText中,点击不起作用。 我尝试在apadter中非常小心,并保存EditText状态并在getView方法的ListView适配器中重新创建它。

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

+3

我在'ListView'中使用'EditTexts'遇到了很多麻烦。视图回收事件对焦点和关键听众造成严重破坏。我开始使用'ScrollView',这并不完美,但效果更好。希望你不必添加数以千计的项目,那么scrollview方法将无法工作。 – dmon 2012-01-30 17:32:15

+0

我已经在考虑'ScrollView'因为你完全正确 - 焦点和键盘受到了破坏。我不打算有数百个项目,但我需要阅读并保存我的项目从/到SQLite数据库。用ScrollView做这件事的最好方法是什么? – 2012-01-30 18:25:18

+0

我只是将所需的TextViews和EditTexts手动添加到ScrollView内的LinearLayout。这有点奇怪,因为我有一个适配器,我通过调用getView()和一个支持它的模型来循环,但它归结为调用'addView()'。 – dmon 2012-01-31 03:06:12

回答

1

我发现这是怎么回事用requestFocus()方法的一个很好的解释称这里: Android Actionbar Tabs and Keyboard Focus 在两句话:当你调用requestFocus()方法(或它被称为是由于布局XML设置),而整个视图树还没有布局,你的观点会认为它有重点,但事实上它可能没有。 一种解决方案是在视图上调用post(Runnable),或者在布局完成后请求焦点。