2017-05-15 1 views
0

사용자가 타이핑을 시작하거나 타이핑을 멈 추면 EditText의 타이핑 상태를 찾고 싶습니다. 나는 addTextChangedListener을 찾았지만 연속적으로 이벤트를 시작합니다. 어떤 도움이라도 대단히 감사 할 것입니다. 채팅 응용 프로그램에서 입력 상태를 참조 할 수 있습니다. 추신 : 제발 addTextChangedListenerAndroid에서 EditText의 타이핑 상태를 찾는 방법은 무엇입니까?

+0

리스너에 어떤 문제가, 내가 정의 EditText

public class CustomTypingEditText extends CustomEditTextNormal implements TextWatcher { private static final int TypingInterval = 800; //your listener interface that you implement anonymously from the Activity public interface OnTypingModified { void onIsTypingModified(EditText view, boolean isTyping); } private OnTypingModified typingChangedListener; //members you would need for the small thread that declares that you have stopped typing private boolean currentTypingState = false; private Handler handler = new Handler(); private Runnable stoppedTypingNotifier = new Runnable() { @Override public void run() { //part A of the magic... if (null != typingChangedListener) { typingChangedListener.onIsTypingModified(CustomTypingEditText.this, false); currentTypingState = false; } } }; public CustomTypingEditText(Context context, AttributeSet attrs) { super(context, attrs); this.addTextChangedListener(this); } public CustomTypingEditText(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); this.addTextChangedListener(this); } public CustomTypingEditText(Context context) { super(context); this.addTextChangedListener(this); } public void setOnTypingModified(OnTypingModified typingChangedListener) { this.typingChangedListener = typingChangedListener; } @Override public void afterTextChanged(Editable s) { //part B of the magic... if (null != typingChangedListener) { if (!currentTypingState) { typingChangedListener.onIsTypingModified(this, true); currentTypingState = true; } handler.removeCallbacks(stoppedTypingNotifier); handler.postDelayed(stoppedTypingNotifier, TypingInterval); } } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence text, int start, int before, int after) { } } 

를 작성하여 이런 짓을했는지 그리고 여기에 리스너는 무엇입니까? 상태를 입력하면 무엇을 의미합니까? –

+0

입력 상태는 현재 사용자가 EditText @ MuratK에 입력했는지 여부를 나타냅니다. – Kuls

+0

그냥 뭘하고 싶은지 좀 더 알려주세요 –

답변

1

etMessage.setOnTypingModified(new CustomTypingEditText.OnTypingModified() { 

    @Override 
    public void onIsTypingModified(EditText view, boolean isTyping) { 

     if(isTyping){ 
      Log.i(TAG, "onIsTypingModified: User started typing."); 
     }else{ 
      Log.i(TAG, "onIsTypingModified: User stopped typing"); 
     } 
    } 

}); 
2

당신을 위해 addTextChangeListener 정의 edittext, 이것은 콜백을 쓰는 데 적합합니다.

public void afterTextChanged(Editable s) { 
       if (!TextUtils.isEmpty(s.toString()) && s.toString().trim().length() == 1) { 
        updateIsTyping("y"); 
        isType = true; 
       } else if (s.toString().trim().length() == 0 && false) { 
        updateIsTyping("n"); 
        isType = false; 
       } 
      } 
+0

채팅 앱에 이것을 사용했는데 지금까지 잘 작동합니다. –

+0

거짓 결과가 나타나지 않습니다. – Kuls

+0

코드를 디버그하고 거짓 코드가 실행되는지 확인하십시오. –

0

정확하게 이해하면 입력을 시작할 때와 입력을 중지 할 때 이벤트를 실행하고 싶습니다. addTextChangeListener는 솔루션의 일부이지만 타이머와 부울을 결합해야합니다.

사용자가 입력을 시작할 때마다 부울을 true로 설정하고 시간을 기록하십시오. 정기적으로 시간을 확인하십시오 - 사용자가 입력 한 마지막 시간 이후로 몇 초가 지나면 사용자가 타이핑을 중지하고 부울을 거짓으로 설정하고 타이머를 재설정 한 것으로 간주하십시오.

관련 문제