2012-08-30 22 views
6

Tôi đang sử dụng TextWatcher và tôi không thể phát hiện Phím Backspace trong sự kiện TextWatcher.afterTextChange. Tôi cũng muốn xóa textView trên một số điều kiện trong sự kiện textWatcher.Phát hiện backspace trong TextWatcher

public void afterTextChanged(Editable s) { 
    // TODO Auto-generated method stub 
    // I want to detect backspace key here 
} 
+0

Mã cho 'Trình xem văn bản' của bạn, vui lòng? – Swayam

+0

public void afterTextChanged (Editable s) { \t \t \t \t \t \t \t // TODO phương pháp tự động tạo còn sơ khai \t \t \t \t \t \t \t // tôi muốn để phát hiện phím backspace đây \t \t \t \t \t \t \t \t \t \t \t \t} –

Trả lời

9

A KeyListener có thể đáp ứng cả hai điều kiện của bạn.

mEditText.setOnKeyListener(new OnKeyListener() {     
    @Override 
    public boolean onKey(View v, int keyCode, KeyEvent event) { 
      if(keyCode == KeyEvent.KEYCODE_DEL){ 
      //on backspace 
      } 
    return false   
     } 
}); 

Tương tự bên trong onKey(), bạn có thể đặt nhiều câu lệnh kiểm tra để kiểm tra điều kiện, khi bạn muốn xóa textView.

EDIT: Như @RankoR là loại, đủ để chỉ ra, xin lưu ý rằng onKeyListener() công trình chỉ dành cho bàn phím phần cứng và không phải là bàn phím mềm.

+2

OnKeyListener chỉ hoạt động đối với bàn phím HW. – arts777

+0

@RankoR: Vâng, tôi biết thực tế là onKeyListener không hoạt động với bàn phím mềm. Nhưng nếu bạn đã đi qua câu hỏi một lần nữa, bạn sẽ thấy rằng câu hỏi không phải là cụ thể cho bàn phím mềm. Nhưng, vâng .. lại một lần nữa, bạn đã thực hiện một điểm khá hợp lệ. Sẽ chỉnh sửa câu trả lời của tôi để bao gồm cả điểm của bạn. – Swayam

+0

@RankoR: Đã chỉnh sửa câu trả lời. Có lẽ bạn có thể xem xét lại * downvote * của bạn ngay bây giờ. : D – Swayam

10

Để phát hiện một backspace trong TextWatcher, bạn có thể kiểm tra số lượng biến mà được chuyển vào onTextChange chức năng (count sẽ là 0 nếu một backspace đã được nhập), như thế này:

@Override 
public void onTextChanged(CharSequence cs, int start, int before, int count) { 

    if (react) { 
    if (count == 0) { 
     //a backspace was entered 
    } 

    //clear edittext 
    if(/*condition*/) { 
     react = false; 
     setText(""); 
     react = true; 
    } 
    } 
} 

Các phản ứng boolean là cần thiết cho hàm setText() nếu không nó sẽ trở thành đệ quy. Hi vọng điêu nay co ich!

+6

Nó không gọi lại khi không có thay đổi văn bản khi s.length() = 0, phím nào được nhấn sẽ không có cuộc gọi trở lại .. – DJphy

+1

Không nhận được cuộc gọi lại trong 'onTextChanged' khi nhấn nút quay lại và không có ký tự nào trong 'EditText'. Bạn không chắc chắn tại sao câu trả lời này thậm chí thoát khỏi đây! – sud007

+0

nếu gõ một là khoảng trắng thì cũng đếm == 0 –

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