2017-11-29 9 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은 마지막 키가 눌 렸을 때 추가 된 문자의 색인이므로 TextViewEditText에 마지막으로 입력 한 문자를 표시해야합니까?

은 나도이 시도 :

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

사용()

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

당신은 도움이 다시 onTextChanged의 호출 코드를 아래이

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에 입력 된 첫 번째 문자 만 표시합니다. 이후 keypress는 TextView의 값을 변경하지 않습니다. –