一个EditText的OnKey事件对两个EditText有效,如何解决此问题



作为这里的初学者,我想制作一个简单的应用程序,其中有4个连续的EditText,一旦第一个EditText完成,用户按下"回车",焦点就会自动转移到下一个EditText,第一个EditText。我使用了"onKey侦听器"。但是,每当按下第一个EditText的回车键时,第一个和第二个EditText字段都会消失。这是代码

public class MainActivity extends AppCompatActivity {

protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final EditText ko = findViewById(R.id.one);
final EditText ma = findViewById(R.id.two);
final EditText ko1 = findViewById(R.id.three);
final EditText xa = findViewById(R.id.four);
final TextView te = findViewById(R.id.ko);
ko.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View view, int i, KeyEvent keyEvent) {
if(i == KeyEvent.KEYCODE_ENTER) {
ko.setVisibility(View.INVISIBLE);
ma.requestFocus();
}
return false;
}
});
ma.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View view, int i, KeyEvent k) {
if(i == KeyEvent.KEYCODE_ENTER) {
ma.setVisibility(View.INVISIBLE);
ko1.requestFocus();
}
return false;
}
});
ko1.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View view, int i, KeyEvent t) {
if(i == KeyEvent.KEYCODE_ENTER) {
ko1.setVisibility(View.INVISIBLE);
xa.requestFocus();
}
return false;
}
});

}
public void onClick(View v){
EditText ko = findViewById(R.id.one);
EditText ma = findViewById(R.id.two);
EditText ko1 = findViewById(R.id.three);
EditText xa = findViewById(R.id.four);
String t = ko.getText().toString();
String u = ma.getText().toString();
String x = ko1.getText().toString();
String w = xa.getText().toString();
String total = t +" "+ u +" "+x + " " +w;
Toast.makeText(this, total,Toast.LENGTH_LONG).show();
}

}

如果返回错误,事件将继续在容器链中冒泡

如果侦听器已使用该事件,则返回True,否则返回false。


ko.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View view, int i, KeyEvent keyEvent) {
if(i == KeyEvent.KEYCODE_ENTER) {
ko.setVisibility(View.INVISIBLE);
ma.requestFocus();
}
return true;//change this line and all its occurances
}
});

请求焦点后返回true。请参阅View.OnKeyListener

如果侦听器已使用该事件,则为True,否则为false。

public boolean onKey(View view, int i, KeyEvent keyEvent) {
if(i == KeyEvent.KEYCODE_ENTER) {
ko.setVisibility(View.INVISIBLE);
ma.requestFocus();
return true; // this will consume the Enter event
}
return false;
}

最新更新