我正在制作OTP Activity
,需要实现删除功能,我有以下应在退格按钮上onKey
触发的功能。我的想法是,我可以使用getCurrentFocus
来了解当前正在填充的字段,然后使用requestFocus
来选择之前的那个,但是似乎不起作用,我还有一个{{1 }}效果很好,所以我很困惑为什么。
goToNext
下面是 public void goToPrevious() {
EditText currentFocus = (EditText) getCurrentFocus();
if (currentFocus == otpOne) {
return;
}
if (currentFocus == otpTwo) {
otpOne.requestFocus();
return;
}
if (currentFocus == otpThree) {
otpTwo.requestFocus();
return;
}
if (currentFocus == otpFour) {
otpThree.requestFocus();
return;
}
}
的代码,效果很好。
goToNext
我通过实现onKeyListener来调用goToPrevious,下面是代码
public void goToNext() {
EditText currentFocus = (EditText) getCurrentFocus();
if (currentFocus == otpOne) {
otpTwo.requestFocus();
return;
}
if (currentFocus == otpTwo) {
otpThree.requestFocus();
return;
}
if (currentFocus == otpThree) {
otpFour.requestFocus();
return;
}
if (currentFocus == otpFour) {
return;
}
}
答案 0 :(得分:1)
由于一些非常奇怪的原因,我必须通过将getCurrentFocus
的值直接传递到goToPrevious
来修复它,getCurrentFocus
处理程序中的onKey
的值不同于{ {1}},下面是我最终得到的代码。
goToPrevious
答案 1 :(得分:0)
您可以按以下方式使用:
et1.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(s.length()==1)
{
et2.requestFocus();
}
else if(s.length()==0)
{
et1.clearFocus();
}
}
});
et2.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(s.length()==1)
{
et3.requestFocus();
}
else if(s.length()==0)
{
et1.requestFocus();
}
}
});
et3.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(s.length()==1)
{
et4.requestFocus();
}
else if(s.length()==0)
{
et2.requestFocus();
}
}
});
et4.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(s.length()==1)
{
et5.requestFocus();
}
else if(s.length()==0)
{
et3.requestFocus();
}
}
});
et5.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(s.length()==1)
{
et6.requestFocus();
}
else if(s.length()==0)
{
et4.requestFocus();
}
}
});
et6.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(s.length()==1)
{
et6.clearFocus();
}
else if(s.length()==0)
{
et5.requestFocus();
}
}
});