我知道这里有很多类似的问题,但我无法在一个简单的示例应用程序中获得任何提供的解决方案。
首次显示软键盘时出现问题。一旦显示,只需再次按editText即可对其进行编辑。
尝试了以下操作:
android:windowSoftInputMode="adjustPan|adjustResize"
这并不能解决任何问题。似乎在弹出软键盘后,此行必须调整activity的大小。不幸的是,它也会导致任何EditTexts失去焦点。这可能是因为ListView本身在调整大小过程之后获得了关注。因此,我尝试了以下解决方法:
listView.setDescendantFocusability(ViewGroup.FOCUS_AFTER_DESCENDANTS);
这总是会导致ListView
包含的第一个visible EditText获得焦点,这是不可取的。第二行中的第二个EditText应该在按下时获得焦点,这是不会发生的。此外,如果我最终成功地将焦点对准了显示的第一个EditText之外的另一个ListView (例如,通过按下softkeyboard
上的“下一步”),则在键盘关闭并再次将ListView调整到其完整大小后,第一个可见的and将获得焦点。
我尝试了其他一些事情,比如拦截ListView的onFocusChange()
事件,同时知道哪个EditText被它的TouchListener
按下了。再次请求该特定EditText的焦点也不会导致任何成功。
对于相关的项目,使用ScrollView
而不是其他用户建议的ListView
也不是一种选择。
发布于 2013-12-12 12:29:40
对于这种情况,一个典型的技巧就是使用处理程序和postDelayed()
。在您的适配器中:
private int lastFocussedPosition = -1;
private Handler handler = new Handler();
public View getView(final int position, View convertView, ViewGroup parent) {
// ...
edittext.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus) {
handler.postDelayed(new Runnable() {
@Override
public void run() {
if (lastFocussedPosition == -1 || lastFocussedPosition == position) {
lastFocussedPosition = position;
edittext.requestFocus();
}
}
}, 200);
} else {
lastFocussedPosition = -1;
}
}
});
return convertView;
}
这在我的设备上是有效的,但是不要让这段代码投入生产。如果焦点bug在不同的android版本或roms中表现不同,我也不会感到惊讶。
在ListView
中嵌入EditText
还有许多其他问题,它们的解决方案看起来像黑客一样。看看所有的other people正在苦苦挣扎。
像这样的事情也很容易发生:
。
在我自己走了很多次类似的道路之后,我基本上已经放弃了尝试覆盖任何默认的键盘行为或怪癖。如果可能的话,我建议您尝试在您的应用程序中找到替代解决方案。
您是否考虑过让ListView
行只是一个带样式的TextView
,然后在单击行时显示带有EditText
的Dialog
,并根据需要更新TextView?
发布于 2014-06-17 05:41:41
当我按下位于ActionBar行中的EditText时,我遇到了ListView“窃取”焦点的问题。上面的解决方案不起作用,但下面的解决方案对我有效:
http://www.mysamplecode.com/2013/02/android-edittext-listview-loses-focus.html
基本上,我在我的ListView中添加了以下内容:
android:descendantFocusability="beforeDescendants"
并将此添加到我的活动中:
android:windowSoftInputMode="adjustPan"
发布于 2015-02-16 16:50:49
修改您的清单xml以在您的活动中添加windowSoftInputMode:
<activity
android:name=".YourActivity"
android:windowSoftInputMode="adjustPan">
</activity>
https://stackoverflow.com/questions/20406472
复制相似问题