在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 ,然后在单击一行时显示带有EditTextDialog ,根据需要更新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

下一篇: How to clear focus for EditText?