2011-01-25 30 views
8

Tôi đang cố xóa một trường EditText đa dòng bên trong phương thức OnEditorActionListener.onEditorAction.Xóa một EditText đa dòng

Nhưng sử dụng bất kỳ cách rõ ràng ví dụ:

((EditText) view).getEditableText().clear(); 
((EditText) view).getEditableText().clearSpans(); 
((EditText) view).setText(""); 

chỉ xóa các nhân vật có thể nhìn thấy - rời các dòng mới trong lĩnh vực này (mà sau đó phải được xóa thủ công).

Có cách nào để 'hoàn toàn' xóa trường EditText đa dòng không? (Hoặc ít nhất - không ai biết lý do tại sao ở trên không làm việc?)

+0

Giải quyết (sau một phút ngủ ngon) - dòng mới đã được thêm vào sau khi xóa văn bản vì thực thi phương thức onEditorAction đã trả về false (vì các lý do khác). Trả về 'true' chỉ ra rằng 'enter' đã được xử lý/tiêu thụ và clear() hoạt động như mong đợi. – tonys

+1

bạn nên thêm phần trên làm câu trả lời rồi chấp nhận nó, tốt nhất là với mẫu mã làm việc tốt :-) –

+0

@ dave.c. Thực hiện :-) – tonys

Trả lời

7

Giải Quyết (sau một phút ngủ ngon) - dòng mới đã được thêm vào sau khi xóa văn bản vì thực thi phương thức onEditorAction đã trả về false (vì các lý do khác).

Trở true chỉ ra rằng 'nhập' đã được xử lý/tiêu thụ và clear() cư xử như mong đợi:

edittext.setOnEditorActionListener(new OnEditorActionListener() { 
    @Override 
    public boolean onEditorAction(TextView view,int actionId,KeyEvent event) { 
      post(view.getText().toString()); 

      ((EditText) view).getEditableText().clear(); 

      return true; 
     } 
    }); 
0

Tôi không có một IDE đây để kiểm tra, nhưng bạn có thể cung cấp cho nó một thử:

  • ((EditText) view).clearComposingText() Đó là một phương pháp kế thừa từ TextView
  • Không quá thanh lịch nhưng có thể hoạt động: setSingleLine =đúng và sau đó false một lần nữa. Có lẽ hữu ích cho đến khi ai đó có thể cung cấp một cái gì đó tốt hơn ...
+0

Ngoài sự tò mò (xem bình luận cho câu hỏi ban đầu) Tôi đã thử điều này nhưng nó dường như không hoạt động. – tonys

0

Có một cách với setMaxLines:

yourEditText.getEditableText().clear(); 
yourEditText.setMaxLines(1); 
+0

Chỉ cần cho hồ sơ (xem bình luận cho câu hỏi ban đầu) Tôi đã thử này, nhưng nó không có vẻ làm việc. – tonys

+1

@tonys: điều này thật kỳ lạ vì nó làm việc cho tôi. Tôi thiết lập một hoạt động đơn giản với một văn bản chỉnh sửa và một nút. Tôi bắt đầu nhập một số văn bản làm cho văn bản chỉnh sửa đa dòng. Sau đó, với nút tôi gọi là hai dòng ở trên và văn bản chỉnh sửa đã được xóa hoàn toàn. – gulbrandr

+0

Tôi đoán việc thực thi onEditorAction (...) của bạn trả về true, trong trường hợp đó là getEditableText(). Clear() hoạt động tốt. – tonys

0

Có lẽ tôi cảm thấy một chút quá may mắn nhưng:

((EditText) view).setText(null); 
+1

Tôi sẽ ngạc nhiên nếu điều này hoạt động, như điều đầu tiên 'setText (văn bản CharSequence, kiểu BufferType, boolean notifyBefore, int oldlen)' (mà cuối cùng được gọi là 'setText (văn bản CharSequence)') là để kiểm tra 'null' và thay thế bằng một' Chuỗi' trống. Xem [source code] (http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/2.1_r2/android/widget/TextView.java#2559).Nếu nó làm việc tôi rất muốn biết tại sao. –

+0

nó không hoạt động (tôi đã thử nó) – tonys

+0

hehe :-) Xin lỗi vì sự lạc quan của vị thành niên, nhưng đôi khi tôi nhận thấy rằng tôi quá bận rộn với việc tìm kiếm "gốc rễ của cái ác" mà tôi đơn giản là không kiểm tra những điều đơn giản nhất (mà tất nhiên hầu như luôn luôn là chính xác những gì giải quyết vấn đề của tôi) :-) Trong trường hợp này nó đã không thực sự dễ dàng mặc dù (giống như @ dave.c lưu ý ở trên). – dbm

0

tôi đã sử dụng điều này khi tôi đã có một nút rõ ràng về ứng dụng của tôi

  Button clearButton = (Button)findViewById(R.id.clear); 

    clearButton.setOnClickListener(new Button.OnClickListener() { 

     public void onClick(View v) { 

      number = (EditText) findViewById(R.id.text_reading); 

      number.setText(""); 

      } 
     });