0

私は Android アプリケーションを構築していますが、2 つの問題に直面しています。現在、onKey メソッドを使用してテキスト ボックスを解析し、ユーザーが入力したデータを取得しています。これは正常に機能していますが、ユーザーがテキスト ボックスを空白にしてデータを送信することを選択すると、アプリケーションがクラッシュします。try と catch を追加して、その例外を処理/無視し、Enter キーが押されても空白がある場合は何も送信しないようにしたいと考えています。

Enterキーを押すと、2番目の問題が発生します。これにより、データが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. 2番目の問題の使用

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

    また

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