2017-05-15 12 views
0

ユーザーが入力を開始したり、入力をやめたりすると、EditTextの入力状況がわかります。私はaddTextChangedListenerを見つけましたが、それは連続的にイベントを発します。どんな助けでも大歓迎です。どのチャットアプリケーションからでも入力状況を参照できます。 P.S: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をこのように定義してください。これは、コールバックを書くのに最適です。

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に設定して時間を記録します。定期的に時刻をチェックする - ユーザーが最後に入力してから2〜3秒が経過した場合、ユーザーが入力を停止したとみなし、ブール値をfalseに設定してタイマーをリセットします。

関連する問題