2016-03-21 12 views
0

Bitte helfen Sie mir. Ich habe seit einem Tag mit diesem Problem gekämpft. Ich weiß nicht, wie man das löst.Während ich versuche, ein beliebiges Zeichen in editiertext einzugeben, werden Schlüssel eingegeben, aber das Schreiben von Zeichen wurde nicht auf dem erforderlichen Feld festgelegt. Während ich versuche, das Zeichen mithilfe von settext() in Text change listener zu setzen, wird Stackoverflow-Fehler durchsucht. Hinweis: Es wurde nur in 4,4 kitkat (erwähnt micromax Gerät) passiert aber, während in nexus Überprüfung es gut funktioniert)Löschen von Ereignis wegen kein Fensterfokus: KeyEvent

edtPwd1 = (EditText) findViewById(R.id.edt_pwd_1); 
    edtPwd2 = (EditText) findViewById(R.id.edt_pwd_2); 
    edtPwd3 = (EditText) findViewById(R.id.edt_pwd_3); 
    edtPwd4 = (EditText) findViewById(R.id.edt_pwd_4); 
    edtPwd1.setOnTouchListener(new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      edtPwd1.setFocusable(true); 
      edtPwd1.setCursorVisible(true); 
      return false; 
     } 
    }); 
    edtPwd2.setOnTouchListener(new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      edtPwd2.setFocusable(true); 
      edtPwd2.setCursorVisible(true); 
      return false; 
     } 
    }); 
    edtPwd3.setOnTouchListener(new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      edtPwd3.setFocusable(true); 
      edtPwd3.setCursorVisible(true); 
      return false; 
     } 
    }); 
    edtPwd4.setOnTouchListener(new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      edtPwd4.setFocusable(true); 
      edtPwd4.setCursorVisible(true); 
      return false; 
     } 
    }); 
    edtPwd1.addTextChangedListener(new TextWatcher() { 
     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, int after) { 
     } 

     @Override 
     public void onTextChanged(CharSequence s, int start, int before, int count) { 
      Log.e("sdfsadfsdfsdf------", "-------" + s); 
      // edtPwd1.requestFocus(); 
     } 

     @Override 
     public void afterTextChanged(Editable s) { 
      //edtPwd1.setText(s); 
      edtPwd1.clearFocus(); 
      edtPwd2.requestFocus(); 
     } 
    }); 
    edtPwd2.addTextChangedListener(new TextWatcher() { 
     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, int after) { 
     } 

     @Override 
     public void onTextChanged(CharSequence s, int start, int before, int count) { 
      Log.e("efasdhfhsldf-----", "------1" + s); 
      edtPwd2.requestFocus(); 
     } 

     @Override 
     public void afterTextChanged(Editable s) { 
      //edtPwd2.setText(s); 
      edtPwd2.clearFocus(); 
      edtPwd3.requestFocus(); 
     } 
    }); 
    edtPwd3.addTextChangedListener(new TextWatcher() { 
     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, int after) { 
     } 

     @Override 
     public void onTextChanged(CharSequence s, int start, int before, int count) { 
      Log.e("efasdhfhsldf-----", "------2" + s); 
      edtPwd3.requestFocus(); 
     } 

     @Override 
     public void afterTextChanged(Editable s) { 
      //edtPwd3.setText(s); 
      edtPwd3.clearFocus(); 
      edtPwd4.requestFocus(); 
     } 
    }); 
    edtPwd4.addTextChangedListener(new TextWatcher() { 
     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, int after) { 
     } 

     @Override 
     public void onTextChanged(CharSequence s, int start, int before, int count) { 
      Log.e("efasdhfhsldf-----", "------4" + s); 
      edtPwd4.requestFocus(); 
     } 

     @Override 
     public void afterTextChanged(Editable s) { 
      //edtPwd4.setText(s); 
      if (!edtPwd4.getText().toString().isEmpty()) { 
       edtPwd4.clearFocus(); 
       edtPwd1.clearFocus(); 
       edtPwd2.clearFocus(); 
       edtPwd3.clearFocus(); 
       edtPwd1.setFocusable(false); 
       edtPwd2.setFocusable(false); 
       edtPwd3.setFocusable(false); 
       edtPwd4.setFocusable(false); 
       edtPwd1.setFocusableInTouchMode(true); 
       edtPwd2.setFocusableInTouchMode(true); 
       edtPwd3.setFocusableInTouchMode(true); 
       edtPwd4.setFocusableInTouchMode(true); 
       edtPwd1.setCursorVisible(false); 
       InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
       imm.hideSoftInputFromWindow(edtPwd4.getWindowToken(), 0); 
      } 
     } 
    }); 
    edtPwd2.setOnFocusChangeListener(new View.OnFocusChangeListener() { 
     @Override 
     public void onFocusChange(View v, boolean hasFocus) { 
      if (hasFocus) { 
       if (edtPwd1.getText().toString().equals("")) { 
        edtPwd2.clearFocus(); 
        edtPwd1.requestFocus(); 
       } 
      } 
     } 
    }); 
    edtPwd3.setOnFocusChangeListener(new View.OnFocusChangeListener() { 
     @Override 
     public void onFocusChange(View v, boolean hasFocus) { 
      if (hasFocus) { 
       if (edtPwd1.getText().toString().equals("")) { 
        edtPwd3.clearFocus(); 
        edtPwd1.requestFocus(); 

       } else if (edtPwd2.getText().toString().equals("")) { 
        edtPwd3.clearFocus(); 
        edtPwd2.requestFocus(); 
       } 
      } 
     } 
    }); 
    edtPwd4.setOnFocusChangeListener(new View.OnFocusChangeListener() { 
     @Override 
     public void onFocusChange(View v, boolean hasFocus) { 
      if (hasFocus) { 
       if (edtPwd1.getText().toString().equals("")) { 
        edtPwd4.clearFocus(); 
        edtPwd1.requestFocus(); 

       } else if (edtPwd2.getText().toString().equals("")) { 
        edtPwd4.clearFocus(); 
        edtPwd2.requestFocus(); 

       } else if (edtPwd3.getText().toString().equals("")) { 
        edtPwd4.clearFocus(); 
        edtPwd3.requestFocus(); 
       } 
      } 
     } 
    }); 

Sorry für mein schlechtes Englisch und Dank im Voraus

+0

haben Sie Textfarbe überprüfen? weil es seltsam ist, dass der Text nicht gesetzt ist. Es wird automatisch in der Standardfunktionalität eingestellt. – KDeogharkar

+0

ya ich überprüfte und änderte auch Textfarbe. eingegebenes Zeichen wurde nicht in edititext eingegeben – Palanivelraghul

+0

fügen Sie Ihren Code bitte hinzu. – KDeogharkar

Antwort

0

Die TextChangeListner wird Komplexität schaffen Befüllen des eingegebenen Textes, der davon abhängt, welche Methoden überschrieben werden. Darüber hinaus werden alle Android-Versionen standardmäßig auf EditText konzentrieren, sobald der Benutzer drückt. Eine virtuelle Tastatur ist auch verfügbar, sofern und solange der Entwickler die Standardfunktionen nicht durch Code geändert hat.

Zuerst, um zu überprüfen, ob Sie Text in EditText eingeben können, behalten Sie nur die folgenden und kommentieren Sie alle anderen Implementierungen.

edtPwd1 = (EditText) findViewById(R.id.edt_pwd_1); 
edtPwd2 = (EditText) findViewById(R.id.edt_pwd_2); 
edtPwd3 = (EditText) findViewById(R.id.edt_pwd_3); 
edtPwd4 = (EditText) findViewById(R.id.edt_pwd_4); 

Wenn Sie nun den eingegebenen Text bearbeiten möchten, können Sie das folgende Beispiel ausprobieren. Dadurch wird der Text von einem Bearbeiten von Text in andere durch einen Handler eingegeben kopieren

EditText text1;EditText text2; 
StringBuffer previousChar=new StringBuffer(); 

     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
     setContentView(R.layout.activity_main); 
     text1=(EditText)findViewById(R.id.editText); 
     text2=(EditText)findViewById(R.id.editText2); 
     text1.addTextChangedListener(new TextWatcher() { 
        @Override 
        public void beforeTextChanged(CharSequence s, int start, int count, int after) { 
        } 
        @Override 
        public void onTextChanged(CharSequence s, int start, int before, int count) { 
        } 
        @Override 
        public void afterTextChanged(Editable s) { 
         if(!previousChar.toString().equals(s.toString())){ 
          Message msg=new Message(); 
          msg.obj=s.toString(); 
          localHandler.sendMessage(msg); 
          previousChar=new StringBuffer(s.toString()); 
          Log.i("TAG", "TextEntered = "+s); 
         } 
        } 
       });} 

Deklarieren Sie einen Handler bekommen die Zeichenfolge eingegeben

private Handler localHandler = new Handler(){ 
     public void handleMessage(Message msg) { 
      super.handleMessage(msg); 
      String value=(String)msg.obj; 
      text2.setText(value); 
     } 
    }; 
Verwandte Themen