请求将焦点放在edittext上无法正常工作



我有4个edittext,它们充当"输入您的密码";字段,每个edittext设置为在请求将焦点集中到下一个edittext之前只能使用一个数字。如果我为第一个引脚输入一个数字,它会请求聚焦到第二个,然后是第三个,等等。

我现在要做的是,如果用户单击第二个编辑文本或第三个编辑文本,而第一个字段尚未输入,它应该返回并专注于第一个字段。

编辑文本字段

我试着使用onTouchListener来完成这项工作,我注意到,在首先点击第二个编辑文本而不是点击左侧的/1th编辑文本后,我可以看到焦点回到第一个编辑文本,但随后几乎在一瞬间立即回到第二个编辑文本,最终仍然专注于第二个文本。

我还使用onClickListener进行了测试。它确实有效,但需要点击两次。所以我会点击第二个编辑文本,什么都没有发生,然后我再次点击它,然后将焦点移回第一个编辑文本上,但我需要它在第一次点击时发生。

这是代码的一部分

pin1EditTxt.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) {
}
@Override
public void afterTextChanged(Editable s) {
if(pin1EditTxt.getText().toString().length()==1)     //size as per your requirement
{
pin2EditTxt.requestFocus();
}
}
});
//        pin2EditTxt.setOnTouchListener(new View.OnTouchListener() {
//            @Override
//            public boolean onTouch(View v, MotionEvent event) {
//                if(pin1EditTxt.length() == 0){
//                    pin2EditTxt.clearFocus();
//                    pin1EditTxt.requestFocus();
//                }
//                return false;
//            }
//        });
pin2EditTxt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(pin1EditTxt.length() == 0){
pin1EditTxt.requestFocus();
}
}
});

pin2EditTxt.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) {
}
@Override
public void afterTextChanged(Editable s) {
if(pin2EditTxt.getText().toString().length()==1)     //size as per your requirement
{
pin3EditTxt.requestFocus();
}
}
});
pin3EditTxt.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) {
}
@Override
public void afterTextChanged(Editable s) {
if(pin3EditTxt.getText().toString().length()==1)     //size as per your requirement
{
pin4EditTxt.requestFocus();
}
}
});
pin4EditTxt.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) {
}
@Override
public void afterTextChanged(Editable s) {
//Hide keyboard
InputMethodManager imm = (InputMethodManager) getSystemService(Activity.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY, 0);
editTxtWrapper.requestFocus();
}
});

我想您应该在onclick中使用pin1EditTxt.getText((.toString((.length((==0,而不是pin1EditTxt.length((===0。

最新更新