2013-03-15 3 views
0

Je construis une application Android et je suis confronté à 2 problèmes. J'utilise actuellement la méthode onKey pour analyser une zone de texte pour extraire les données tapées par l'utilisateur. Cela fonctionne correctement, mais si l'utilisateur choisit de laisser la zone de texte vide et d'envoyer les données, cela provoquera le blocage de l'application. Je voudrais ajouter un essai et attraper pour manipuler/ignorer cette exception et envoyer rien s'il y a un blanc même si la touche d'entrée est pressée.onKey et les exceptions

Mon deuxième problème se produit lorsque j'appuie sur la touche Entrée. Cette cause d'envoyer les données 2 fois et c'est un peu ennuyeux. Je pense que c'est parce qu'il n'y a pas de blocage dans mon code et que le programme enregistre une pression sur une touche et une libération de clé. Je ne sais pas vraiment comment filtrer cela et j'ai besoin de quelques entrées.

Voici mon code:

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

     } 

     } 
    }); 

Merci pour votre aide!

+0

votre logcat Pouvez-vous poster s'il vous plaît? – Vinay

+0

Bien sûr, j'ai essayé de le poster avec une copie/passé, mais le formatage était assez laid est-il un moyen de le faire correctement? – Mathieu660

Répondre

0
  1. pour le premier problème d'abord vérifier si le texte est vide.

    if(txtSetKi.getText().length() != 0) 
         // perform task 
    
  2. pour le deuxième problème, utilisez

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

    ou

    if(keyEvent == KeyEvent.ACTION_UP) 
          // perform task 
    
0

Essayez cette

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