2017-11-29 2 views
0

EditTextビュー内でどのキーが押されたかを取得し、同じアクティビティでTextViewのテキストとして設定しようとしています。たとえば、押された最後のキーが文字 't'だった場合、 't'はTextViewに表示されます(文字シーケンス全体ではありません)。文字列メソッドを呼び出すと、TextWatcher内でアプリケーションがクラッシュする

私は次のことを試してみました:

phoneInput.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) { 
     tracker.setText(s.charAt(start)); 
    } 

    @Override 
    public void afterTextChanged(Editable s) { 

    } 
}); 

これは、クラッシュが生じました。私は確信していませんが、startは最後のキーが押されたときに追加された文字のインデックスですので、TextViewは最後に入力した文字をEditTextに表示する必要がありますか?

私もこれを試してみました:

phoneInput.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) { 
     String sequence = s.toString(); 
     tracker.setText(sequence.charAt(sequence.length() - 1)); 
    } 

    @Override 
    public void afterTextChanged(Editable s) {} 
}); 

私は任意の文字列メソッドの使用がクラッシュ、でもlength()を引き起こしていると思います。私は間違って何をしていますか?

+0

@IntelliJAmiya Nope!私のために働かなかった。 –

+0

私の記事を参照してください – Raja

答えて

2

バックonTextChangedの呼び出しのコード下記の使用()

String text = charSequence.toString(); 
      if (text.length() >0) { 
       Character character = text.charAt(text.length()-1); 
       Character character1 = character; 
       tv.setText(character1.toString()); 
      } else { 
       // if you want to remove last character too then setText("""); 
      } 

のような支援を期待を試してみて下さい。

+0

はい!それはトリックでした。しかし、あなたはそれをさらに説明できますか?なぜクラッシュ、なぜあなたのソリューションはうまくいったのですか? –

+0

それがあなたを助けた場合、私の回答に合格とマークしてください:) –

+0

クラッシュを説明してもらえますか? –

2

あなたはこの

editText.addTextChangedListener(new TextWatcher() { 
      @Override 
      public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { 

      } 

      @Override 
      public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { 
       textView.setText(String.valueOf(charSequence.charAt(i1))); 
      } 

      @Override 
      public void afterTextChanged(Editable editable) { 

      } 
     }); 
+0

あなたのソリューションでは、バックスペースが "入力"されると、アプリケーションがクラッシュします。また、EditTextに入力された最初の文字のみが表示されます。その後のキー押下では、TextViewの値は変更されません。 –

関連する問題