diff --git a/app/src/main/java/com/example/tampopo_client/views/ChatActivity.java b/app/src/main/java/com/example/tampopo_client/views/ChatActivity.java index 494c624..2709c72 100644 --- a/app/src/main/java/com/example/tampopo_client/views/ChatActivity.java +++ b/app/src/main/java/com/example/tampopo_client/views/ChatActivity.java @@ -9,6 +9,8 @@ import android.widget.EditText; import android.widget.ImageButton; import android.widget.TextView; +import android.text.Editable; +import android.text.TextWatcher; import androidx.activity.EdgeToEdge; import androidx.appcompat.app.AppCompatActivity; @@ -31,6 +33,7 @@ private Button sendButton; private ImageButton backButton; private TextView roomId; + private boolean isProgrammaticChange = false; // TextWatcher抑制用フラグ Tampopo tampopo; @@ -112,7 +115,10 @@ String chatroomId = tampopo.getChatroomId(); //String chatroomId = "0"; chatViewModel.sendMessage(chatroomId, senderId, senderText, token); - senderMessage.setText("");//自分のメッセージを消す + // 自動クリア時にTextWatcherが発火して不要送信されないように抑制 + isProgrammaticChange = true; + senderMessage.setText(""); // 自分のメッセージを消す + isProgrammaticChange = false; } } }); @@ -130,6 +136,30 @@ } }); + // タイプするたびに現在のテキストを送信 + senderMessage.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 (isProgrammaticChange) return; // プログラムによる変更は無視 + + String text = s.toString(); + if (text.isEmpty()) return; // 空文字は送らない + + String senderId = tampopo.getUserId(); + String token = tampopo.getToken(); + String chatroomId = tampopo.getChatroomId(); + if (chatroomId != null) { + chatViewModel.sendMessage(chatroomId, senderId, text, token); + } + } + }); + //戻るボタン backButton.setOnClickListener(new OnClickListener() { //backButtonがクリックされたときの処理