我正在构建一个Android应用程序,而且我遇到了2个问题。我目前正在使用onKey方法来解析文本框以获取用户输入的数据。这工作正常但如果用户选择让文本框留空并发送数据,这将导致我的应用程序崩溃。我想添加一个try和catch来处理/忽略该异常,如果有空白,即使按下回车键也不发送任何内容。
按下回车键时出现第二个问题。这导致发送数据2次,这有点烦人。我认为这是因为我的代码中没有去抖动,程序注册了按键和按键释放。我真的不知道如何过滤这个,我可能需要一些输入。
这是我的代码:
//Listen to the "Enter" button state changes by user selection of keypad
txtSetKp.setOnKeyListener(new OnKeyListener(){ //This method waits for the "enter" key to be hit
public boolean onKey(View arg0, int arg1, KeyEvent arg2) {
switch(arg1)
{
case KeyEvent.KEYCODE_ENTER:
float newSetKp = Float.parseFloat(txtSetKp.getText().toString());
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); //If "enter" pressed, hide keyboard
if(btSocket != null && btSocket.isConnected()){
mConnectedThread.send("P" + newSetKp);
Log.e(TAG, "P"+newSetKp);
}
imm.hideSoftInputFromWindow(txtSetPoint.getWindowToken(), 0);
return true;
default:
return false;
}
}
});
//Listen to the "Enter" button state changes by user selection of keypad
txtSetKi.setOnKeyListener(new OnKeyListener(){ //This method waits for the "enter" key to be hit
public boolean onKey(View arg0, int arg1, KeyEvent arg2) {
switch(arg1)
{
case KeyEvent.KEYCODE_ENTER:
float newSetKi = Float.parseFloat(txtSetKi.getText().toString());
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); //If "enter" pressed, hide keyboard
mConnectedThread.send("I" + newSetKi);
imm.hideSoftInputFromWindow(txtSetPoint.getWindowToken(), 0);
return true;
default:
return false;
}
}
});
感谢您的帮助!
答案 0 :(得分:0)
试试这个
txtSetKp.setImeOptions(EditorInfo.IME_ACTION_DONE);
txtSetKp.setOnEditorActionListener(new OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
String text = txtSetKp.getText().toString();
if(isNullOrEmpty(text))
System.out.println("Empty");
else
System.out.println("Correct");
return false;
}
});
}
public boolean isNullOrEmpty(String value) {
return value == null || value.length() == 0;
}
答案 1 :(得分:0)
第一个问题首先检查文本是否为空。
if(txtSetKi.getText().length() != 0)
// perform task
使用第二个问题
if(keyEvent == KeyEvent.ACTION_DOWN)
// perform task
或
if(keyEvent == KeyEvent.ACTION_UP)
// perform task