在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>
上一篇: EditText in Listview loses focus when pressed on Android 4.x
