0

我正在构建一个 Android 应用程序,我面临两个问题。我目前正在使用 onKey 方法来解析文本框以获取用户键入的数据。这工作正常,但如果用户选择让文本框空白并发送数据,这将导致我的应用程序崩溃。我想添加一个 try and 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;

        }

       }
    });

感谢你的帮助!

4

2 回答 2

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;
        }
于 2013-03-15T05:36:00.567 回答
0
  1. 对于第一个问题,首先检查文本是否为空。

    if(txtSetKi.getText().length() != 0)
          // perform task 
    
  2. 对于第二个问题使用

    if(keyEvent == KeyEvent.ACTION_DOWN)
          // perform task 
    

    或者

       if(keyEvent == KeyEvent.ACTION_UP)
              // perform task 
    
于 2013-03-15T05:40:59.453 回答