7

Tôi có một số DialogFragment có chứa các nút AutoCompleteTextViewCancelOK.AutoCompleteTextView chỉ cho phép các tùy chọn được đề xuất

AutoCompleteTextView đang đưa ra đề xuất về tên người dùng mà tôi nhận được từ máy chủ.

Điều tôi muốn làm là hạn chế người dùng chỉ có thể nhập tên người dùng hiện tại.

Tôi biết tôi có thể kiểm tra xem tên người dùng đó có tồn tại khi người dùng nhấp vào OK không, nhưng có cách nào khác không, giả sử không cho phép người dùng nhập ký tự nếu không tồn tại tên người dùng đó. Tôi không biết làm thế nào để làm điều này bởi vì trên mỗi nhân vật được nhập, tôi chỉ nhận được tối đa 5 đề xuất. Máy chủ được triển khai theo cách đó.

Bất kỳ đề xuất nào đều được hoan nghênh. Cảm ơn bạn

+0

Sử dụng Spinner thay thế ... – Selvin

+1

@Selvin Tôi không thể sử dụng spinner vì có rất nhiều tên người dùng và khách hàng muốn có chế độ xem văn bản tự động hoàn thành. Cảm ơn đề xuất của bạn – nikmin

+0

về chế độ xem danh sách với tùy chọn tìm kiếm như thế nào? –

Trả lời

10

tôi không thể tìm thấy giải pháp phù hợp hơn thì đây:

tôi thêm này tập trung thay đổi người nghe

actName.setOnFocusChangeListener(new OnFocusChangeListener() { 
     public void onFocusChange(View v, boolean hasFocus) { 
      if (!hasFocus) { 
       ArrayList<String> results = 
         ((UsersAutoCompleteAdapter) actName.getAdapter()).getAllItems(); 
       if (results.size() == 0 || 
         results.indexOf(actName.getText().toString()) == -1) { 
        actName.setError("Invalid username."); 
       }; 
      } 
     } 
}); 

Trường hợp phương pháp getAllItems() trả về ArrayList chứa những gợi ý.

Vì vậy, khi tôi nhập tên người dùng, và sau đó di chuyển đến trường khác, trình xử lý này được kích hoạt và nó sẽ kiểm tra xem danh sách đề xuất có trống không và tên người dùng đã nhập có nằm trong danh sách đó hay không. Nếu điều kiện không hài lòng, lỗi sẽ được hiển thị.

Ngoài ra tôi có kiểm tra tương tự trên OK nút bấm:

private boolean checkErrors() { 

    ArrayList<String> usernameResults = 
      ((UsersAutoCompleteAdapter) actName.getAdapter()).getAllItems(); 

    if (actName.getText().toString().isEmpty()) { 
     actName.setError("Please enter a username."); 
     return true; 
    } else if (usernameResults.size() == 0 || usernameResults.indexOf(actName.getText().toString()) == -1) { 
     actName.setError("Invalid username."); 
     return true; 
    } 

    return false; 
} 

Vì vậy, nếu quan điểm AutoComplete vẫn tập trung, kiểm tra lỗi được thực hiện một lần nữa.

+0

'UsersAutoCompleteAdapter' là gì? –

+0

@Wizard Đó là ListAdapter tùy chỉnh của tôi mà tôi sử dụng cho AutocompleteTextView. Đó chỉ là tên của adapter. – nikmin

+0

ok cảm ơn ........... –

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