Java edittext上的请求焦点无法正常工作
我有4个edittext,充当“输入您的pin”字段,每个edittext设置为在请求聚焦到下一个edittext之前只能获取一个数字。如果我为第一个pin输入一个数字,它会请求将焦点对准第二个,然后再对准第三个,以此类推 我现在想做的是,如果用户点击第二个编辑文本或第三个,而第一个字段还没有输入,它应该返回并关注第一个字段 我尝试使用onTouchListener来实现这一点,我注意到,在首先单击第二个编辑文本而不是单击左/第一个编辑文本后,我可以看到焦点返回到第一个编辑文本,但几乎在一瞬间立即返回到第二个编辑文本,最终仍然保持对第二个编辑文本的关注 我还使用onClickListener进行了测试。它确实可以工作,但需要点击两下。所以我会点击第二版文本,什么都不会发生,然后我再次点击它,然后将焦点移回第一版文本,但我需要它在第一次点击时发生 这是代码的一部分Java edittext上的请求焦点无法正常工作,java,android,android-studio,Java,Android,Android Studio,我有4个edittext,充当“输入您的pin”字段,每个edittext设置为在请求聚焦到下一个edittext之前只能获取一个数字。如果我为第一个pin输入一个数字,它会请求将焦点对准第二个,然后再对准第三个,以此类推 我现在想做的是,如果用户点击第二个编辑文本或第三个,而第一个字段还没有输入,它应该返回并关注第一个字段 我尝试使用onTouchListener来实现这一点,我注意到,在首先单击第二个编辑文本而不是单击左/第一个编辑文本后,我可以看到焦点返回到第一个编辑文本,但几乎在一瞬间
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。如果你在4
Edittext
中使用TextWatcher
,那么你试图这么做可能会很痛苦。我去过那里。看看它是否达到了目的。您可以查看源代码并学习。