2012-10-02 29 views
5

Tôi đã tạo một ứng dụng hoạt động như bàn phím từ xa, nơi người dùng sẽ nhấp vào một văn bản và loại và bảng chữ cái tương ứng sẽ được nhập vào máy tính.Ngăn chặn 'Enter key' để kích hoạt TextWatcher

Tôi đã phát hiện thấy bảng chữ cái và số có chữ V với sự trợ giúp của TextWatcher và gửi chúng đến máy chủ của tôi thành công.

Sự cố xảy ra khi người dùng nhấn phím. Điều này cũng kích hoạt TextWatcher. và kể từ khi tôi gửi các thay đổi được nhập mới nhất, lỗi hiển thị ở phía máy chủ.

Như một giải pháp mà tôi đã làm là, thiết lập một onkeylistener cũng sẽ phát hiện phím enter và thực hiện hành động và TIÊU DÙNG nó, nhưng không may trong trường hợp đó cũng đầu tiên textwatcher được kích hoạt và sau đó onkeylistener.

Đây là mã của onkeylistener tôi

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; 
      } 
    }); 

Mã của 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()); 
     } 
    } 
      . 
      . 
      . 

Vấn đề là trên nhấn phím Enter nó cháy OnTextChanged TextWatcher cũng như onkeylistener. trong khi tôi chỉ muốn người nghe chính bật lửa. Tôi muốn kích hoạt Textwatcher chỉ trong trường hợp bảng chữ cái, số, một số biểu tượng, v.v.

Ngoài ra nếu bạn có thể đề xuất cách tiếp cận khác nhau để phát hiện và gửi ký tự (mềm) sẽ rất tuyệt.

+0

Tôi cũng đã cố gắng đặt nếu có. bên trong TextWatcher để kiểm tra xem thay đổi mới nhất có char không phải là chữ số hay không. nếu nó không thì nó shud không out.println(). Nhưng điều đó cũng không hoạt động. nó vẫn phát hiện phím enter và nhập vào nếu cond và thực thi out.println(). – PrateekArora

+0

Ok tôi nghĩ rằng tôi đã giải quyết nó. trong Textwatcher, hãy thêm câu lệnh if: nếu (s.toString(). chuỗi con (bắt đầu) .contains ("\ n")) theo cách đó nếu khóa cuối cùng được nhập là 'enter' thì nó sẽ đi vào đây là có thể thực hiện bất cứ điều gì bạn muốn. – PrateekArora

Trả lời

1

Ok tôi nghĩ tôi đã giải quyết nó. trong Textwatcher, hãy thêm điều này nếu tuyên bố:

if(s.toString().substring(start).contains("\n")) 

theo cách đó nếu khóa cuối cùng được nhập là 'enter' thì nó sẽ đi vào đó và sau đó bạn có thể thực hiện bất cứ điều gì bạn muốn.

Các vấn đề liên quan