2 sld22525482 sld22525482 于 2016.09.21 09:58 提问

edittext输入ip自动跳转无效,贴出代码求大神看一下

我的edittext是在一个listview的item中的 貌似好像在adpter的getview中无效 在activity里面的就可以

运来的函数是这样写的

private void setEdtIpInput() {
EditeTextWatcher ipTextWatcher1 = new EditeTextWatcher(edt_input1);
EditeTextWatcher ipTextWatcher2 = new EditeTextWatcher(edt_input2);
EditeTextWatcher ipTextWatcher3 = new EditeTextWatcher(edt_input3);
EditeTextWatcher ipTextWatcher4 = new EditeTextWatcher(edt_input4);

    edt_input1.addTextChangedListener(ipTextWatcher1);
    edt_input2.addTextChangedListener(ipTextWatcher2);
    edt_input3.addTextChangedListener(ipTextWatcher3);
    edt_input4.addTextChangedListener(ipTextWatcher4);

}

class EditeTextWatcher implements TextWatcher {
    public EditText mEditText;

    public EditeTextWatcher(EditText mEditText) {
        super();
        this.mEditText = mEditText;
    }

    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {

    }

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
        Log.e("edt", "onTextChanged");
    }

    @Override
    public void afterTextChanged(Editable s) {
        if (s.length() == 3) {
            if (this.mEditText == edt_input1) {
                edt_input2.requestFocus();
            } else if (this.mEditText == edt_input2) {
                edt_input3.requestFocus();
            }
        } else if (s.length() == 1) {
            if (this.mEditText == edt_input3) {
                edt_input4.requestFocus();
            }
        } else if (s.length() == 0) {
            if (this.mEditText == edt_input4) {
                edt_input3.requestFocus();
            } else if (this.mEditText == edt_input3) {
                edt_input2.requestFocus();
            } else if (this.mEditText == edt_input2) {
                edt_input1.requestFocus();
            }
        }
    }
}

然后getview中调用无效是什么情况?然后我这样

edt_input2.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {

                    }

                    @Override
                    public void onTextChanged(CharSequence s, int start, int before, int count) {
                        Log.e("CharSequence","onTextChanged");
                        edt_input2.setFocusable(false);
                        edt_input3.requestFocus();
                    }

                    @Override
                    public void afterTextChanged(Editable s) {

                    }
                });

还是无效?打印出来了 焦点并没有改变。。。 求大神说明一下问题。。

3个回答

gongwei628
gongwei628   2016.09.21 10:15

这样是改变不了焦点的,你可以根据在当前所选择的position来来确定焦点,给edittext设置Touch事件,记录下edittext是属于哪个position,然后在getView事件中判断点击的position和当前的position一致就给edittext设置焦点

sld22525482
sld22525482 能麻烦简单写一点代码说明一下吗?
大约一年之前 回复
sld22525482
sld22525482 这样在fragment里面是可以的啊 上面那个函数是一样的 拿过来用的,而且要求好像不可以用Touch事件事件,这个是用键盘操作,不是触摸屏。。。。
大约一年之前 回复
wangsl_
wangsl_   2016.09.21 11:11

((ViewGroup)convertView).setDescendantFocusability 有次我也是获取不到焦点 在getview里加了这个就可以了 希望对你有帮助

sld22525482
sld22525482 setDescendantFocusability();里面有一个参数 是哪个呀 还有这句话是什么意思呢?
大约一年之前 回复
sld22525482
sld22525482 额。。这个语句加进去直接变红了啊,完整的是这样的吗?
大约一年之前 回复
Mr_dsw
Mr_dsw   Ds   Rxr 2016.09.21 13:35

焦点被ListView给占用了,你可以重写onTouch方法进行焦点的整理。

sld22525482
sld22525482 额。。大神 能简单写一点代码说明一下吗?
大约一年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片