gpt4 book ai didi

java - requestFocus 在使用 getCurrentFocus 时不改变焦点

转载 作者:行者123 更新时间:2023-11-29 23:30:57 25 4
gpt4 key购买 nike

我正在制作一个 OTP Activity 并且需要实现删除功能,我有下面的函数应该在 onKey 退格按钮上触发。我的想法是,我可以使用 getCurrentFocus 来了解当前正在填充哪些字段,然后使用 requestFocus 来选择之前的那个,但它似乎不起作用,我有goToNext 的另一个函数工作得很好,所以我很困惑为什么。

enter image description here

 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 的代码,运行良好。

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;
}
}

我通过实现一个 onKeyListener 来调用 goToPrevious,下面是代码

 @Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
EditText currentFocus = (EditText) getCurrentFocus();
Log.i("ENOUGH", "onKey: " + keyCode + " " + event.getAction() + " " + KeyEvent.KEYCODE_DEL);
switch (event.getKeyCode()) {
case KeyEvent.KEYCODE_DEL: {
currentFocus.setText(null);
goToPrevious();
return false;
}
}
return false;
}

最佳答案

我必须通过将 getCurrentFocus 的值直接传递到 goToPrevious 来修复它,出于某些非常奇怪的原因 getCurrentFocus 的值在 onKey 处理程序与 goToPrevious 不同,下面是我最终得到的代码。

public void goToNext(EditText currentFocus) {

if (currentFocus == otpOne) {
otpTwo.requestFocus();

return;
}

if (currentFocus == otpTwo) {
otpThree.requestFocus();

return;
}

if (currentFocus == otpThree) {
otpFour.requestFocus();

return;
}

if (currentFocus == otpFour) {
return;
}
}

public void goToPrevious(EditText currentFocus) {

if (currentFocus == otpOne) {
return;
}

if (currentFocus == otpTwo) {
otpOne.requestFocus();

return;
}

if (currentFocus == otpThree) {
otpTwo.requestFocus();

return;
}

if (currentFocus == otpFour) {
otpThree.requestFocus();

return;
}
}


@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
Log.i("ENOUGH", "onKey: " + keyCode + " " + event.getAction() + " " + KeyEvent.KEYCODE_DEL);
if (event.getAction() == KeyEvent.ACTION_DOWN) {
EditText currentFocus = (EditText) getCurrentFocus();
switch (event.getKeyCode()) {
case KeyEvent.KEYCODE_DEL: {
if (currentFocus.getText().length() > 0) {
currentFocus.setText(null);
} else {
goToPrevious(currentFocus);

EditText focused = (EditText) getCurrentFocus();
focused.setText(null);
}

return false;
}
case KeyEvent.KEYCODE_FORWARD:
return true;
case KeyEvent.KEYCODE_BACK:
return true;
case KeyEvent.KEYCODE_ENTER:
return true;
default: {
currentFocus.setText("");
goToNext(currentFocus);
}
}
}
return false;
}

关于java - requestFocus 在使用 getCurrentFocus 时不改变焦点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52680558/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com