2011-11-08 1 views
11

Tôi đang sử dụng AutoCompleteTextView của Android với số CursorAdapter để thêm tự động hoàn tất vào ứng dụng. Trong chế độ xem của onItemClickListener() (tức là khi người dùng chạm vào một trong các mục thả xuống tự động hoàn thành), tôi truy xuất văn bản và đặt văn bản trong EditText để người dùng có thể sửa đổi nó nếu cần.Tắt Android AutoCompleteTextView sau khi người dùng chọn mục từ menu thả xuống

Tuy nhiên, khi tôi gọi setText() trên TextView, hành vi tự động hoàn tất được kích hoạt và menu thả xuống hiển thị lại. Tôi muốn chỉ hiển thị menu thả xuống nếu người dùng nhập văn bản mới bằng bàn phím. Có cách nào để làm việc này không?

+0

Tôi đang làm một cái gì đó tương tự ĐÂY !!! http://stackoverflow.com/questions/12854336/autocompletetextview-backed-by-cursorloader – toobsco42

Trả lời

2

Trả lời câu hỏi của riêng tôi sau vài giờ hack: Bạn chỉ nên triển khai OnItemClickListener của riêng mình và thay vào đó dựa vào trình nghe nhấp hiện có để điền vào TextView. Ban đầu tôi đã triển khai onItemClickListener vì nó đã sử dụng kết quả của Cursor.toString() để điền vào dạng xem văn bản. Để thay đổi chuỗi đầu ra, bạn nên triển khai convertToString(Cursor) trong CursorAdapter của mình. CharSequence được trả về sẽ được điền trong chế độ xem văn bản.

Làm điều này cũng sẽ ngăn không cho trình đơn thả xuống hiển thị lại (vì setText() kích hoạt hành vi hoàn thành nhưng mặc định onItemClickListener không).

13

Bạn có thể sử dụng phương thức dismissDropDown() của đối tượng AutoCompleteTextView. Hãy xem qua số documentation.

+0

Tôi muốn ngăn không cho trình đơn thả xuống hiển thị cho đến khi các phím mới được nhập. Nếu tôi sử dụng dismissDropDown(), trình đơn thả xuống sẽ hiển thị ngắn gọn trước khi bị loại bỏ. – magneticMonster

+0

Nếu bạn gọi phương thức trong onItemClickListener(), nó sẽ loại bỏ danh sách, khi bạn bấm vào một mục. Đây không phải là những gì bạn muốn? –

6

Nếu bạn muốn tắt trình đơn thả xuống của AutoCompleteTextView, bạn nên sử dụng phương thức post (Runnable r) của nó. Nó làm việc cho tôi :)

Dưới đây là một ví dụ:

mAutoCompleteTextView.post(new Runnable() { 
    public void run() { 
     mAutoCompleteTextView.dismissDropDown(); 
    } 
} 
+0

Tôi cũng đã thêm cùng một đoạn mã trong onConfigurationChanged vào hoạt động của mình –