ユーザーが編集テキストをクリックして入力すると、対応するアルファベットがコンピューターに入力されるリモートキーボードとして機能するアプリケーションを作成していました。
TextWatcher の助けを借りてさまざまなアルファベットと数字を検出し、それらをサーバーに正常に送信しました。
ユーザーがEnterキーを押すと問題が発生します。これにより、 TextWatcher もトリガーされます。最後に入力した変更を送信しているため、サーバー側にエラーが表示されます。
解決策として、私がしたことは、入力キーを検出してアクションを実行し、それを消費する1つのonkeylistenerも設定することですが、残念ながらその場合、最初のtextwatcherがトリガーされ、次にonkeylistenerがトリガーされます。
これが私のonkeylistenerのコードです
keyboard.setOnKeyListener(new OnKeyListener() {
public boolean onKey(View v, int keyCode, KeyEvent event) {
if(keyCode == KeyEvent.KEYCODE_ENTER&&event.getAction()==KeyEvent.ACTION_UP){
out.println("enter");
return true;
}
return false;
}
});
TextWatcher のコード:
private TextWatcher watcher = new TextWatcher() {
public void onTextChanged(CharSequence s, int start, int before, int count) {
if(count>0){
out.println(":"+s.subSequence(start, start+count).toString());
}
}
.
.
.
Enter キーを押すと問題が発生し、TextWatcher の onTextChanged と onkeylistener が起動します。一方、キーリスナーでのみ発火したい。アルファベット、数字、記号などの場合にのみ Textwatcher を起動したい.
また、文字を検出して送信するための別のアプローチを提案できれば(ソフト)、素晴らしいでしょう。