11

Tôi có một số AutoCompleteTextView Tôi sử dụng để chọn một mục từ danh sách dài. Người dùng chỉ có thể chọn một mục được xác định trước từ danh sách. Họ không thể nhập mục của riêng họ.AutoCompleteTextView phát hiện khi mục nhập đã chọn từ danh sách do người dùng chỉnh sửa

Cách tôi kiểm tra để đảm bảo rằng họ chỉ gửi một mục từ danh sách là sử dụng setOnItemClickListener để kích hoạt cờ boolean. Vấn đề là sau khi cờ boolean được đặt thành true, chúng vẫn có thể chỉnh sửa văn bản đã chọn của mục. Tôi cần phải phát hiện điều này và đặt cờ boolean thành false một lần nữa. Làm thế nào để tôi làm điều này. Tôi đã thấy một gợi ý để sử dụng onKeyDown, nhưng tôi không chắc chắn làm thế nào để thực hiện điều này.

Trả lời

42

Bạn có thể thêm văn bản thay đổi người nghe:

autoCompleteTextView.addTextChangedListener(new TextWatcher() { 

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

    } 

    @Override 
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {     

    } 

    @Override 
    public void afterTextChanged(Editable s) { 

    } 
}); 
+0

Làm cách nào để bạn phân biệt lựa chọn thả xuống thay thế toàn bộ chuỗi của người dùng bằng giải pháp này? – foo

1

Triển khai TextWatcher, sẽ cung cấp cho bạn 3 phương pháp sẽ liên tục nhận lại cuộc gọi khi ai đó thay đổi văn bản. Nếu chuỗi phát triển, người dùng của bạn lại tự gõ lại.

-1

Sử dụng

AutoCompleteTextView#setOnItemSelectedListener() 

- hoạt động giống như một nét duyên dáng.

+0

Mặc dù đoạn mã này có thể giải quyết được câu hỏi, [bao gồm cả giải thích] (http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers) thực sự giúp cải thiện chất lượng bài đăng của bạn. Hãy nhớ rằng bạn đang trả lời câu hỏi cho người đọc trong tương lai và những người đó có thể không biết lý do cho đề xuất mã của bạn. –

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