在Android 4.x上按下时Listview中的EditText失去焦点
我知道这里有很多类似的问题,但我无法在简单的示例应用程序中获得任何提供的解决方案。
第一次显示软键盘时会出现问题。 一旦显示,只需再次按下editText使其可编辑。
试过以下几点:
android:windowSoftInputMode="adjustPan|adjustResize"
这不是解决任何问题。 看起来这条线是弹性软键盘弹出后调整活动的必要条件。 不幸的是,这也导致任何EditTexts失去焦点。 这可能是ListView本身在调整大小过程后获得焦点。 所以我尝试了以下解决方法:
listView.setDescendantFocusability(ViewGroup.FOCUS_AFTER_DESCENDANTS);
这总是会导致ListView
包含的第一个可见EditText获得焦点,这是不可取的。 第二行中的第二个EditText应该在按下时获得焦点,这不会发生。 另外,如果我最终设法关注另一个EditText,然后显示第一个EditText(例如,通过按下softkeyboard
键盘上的'Next'),第一个可见的将在键盘被解散后重新获得焦点并且ListView被重新调整到其全尺寸。
我尝试了几个其他的事情,例如拦截ListView的onFocusChange()
事件,同时知道TouchListener
按下了哪个EditText。 再次请求某个EditText的焦点也没有导致任何成功。
使用ScrollView
而不是其他用户建议的ListView
而不是该项目的选项。
对于这种情况的一个典型的破解是使用处理程序和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;
}
这适用于我的设备,但请保持此代码不在生产中。 如果焦点错误在不同的android版本或者ROM中以不同的方式显示,我也不会感到惊讶。
在一个ListView
中嵌入一个EditText
有很多其他问题,这些问题的解决方案就像是一个黑客攻击。 看到所有其他挣扎的人。
发生这种事情也很容易:
。
在我自己多次走过类似的路径之后,我大多放弃尝试覆盖任何默认的键盘行为或怪癖。 如果可能的话,我会建议您在应用程序中寻找替代解决方案。
你有没有考虑让ListView
行只是一个样式化的TextView
,然后在单击一行时显示带有EditText
的Dialog
,根据需要更新TextView?
当我按下位于ListView行内的EditText时,我遇到了ActionBar“偷窃”焦点的问题。 上述解决方案不起作用,但以下解决方案适用于我:
http://www.mysamplecode.com/2013/02/android-edittext-listview-loses-focus.html
基本上我把这个添加到我的ListView中:
android:descendantFocusability="beforeDescendants"
并将其添加到我的活动中:
android:windowSoftInputMode="adjustPan"
修改您的清单xml以在您的活动中添加windowSoftInputMode:
<activity
android:name=".YourActivity"
android:windowSoftInputMode="adjustPan">
</activity>
链接地址: http://www.djcxy.com/p/4141.html
上一篇: EditText in Listview loses focus when pressed on Android 4.x