2012-07-16 39 views
5

Tôi có một MultiAutoCompleteTextView cho phép bạn nhập vào nhiều mục và hiển thị cho bạn các đề xuất tự động điền. Vấn đề của tôi phát sinh khi tôi gửi dữ liệu của mình. Tôi đang thêm bất kỳ chuỗi đã nhập vào danh sách thả xuống, nhưng nỗ lực của tôi để sắp xếp dữ liệu không thành công. Mã thực thi trên trình:Sắp xếp ArrayAdapter cho Android

final private Comparator<String> comp = new Comparator<String>() { 
    public int compare(String e1, String e2) { 
     return e1.toString().compareTo(e2.toString()); 
    } 
}; 

((ArrayAdapter<String>) autoCompleteView.getAdapter()).add(getString());      
((ArrayAdapter<String>) autoCompleteView.getAdapter()).sort(comp); 

mã cho những gì xảy ra trên cách nhấn vào autoCompleteView:

 view.setOnClickListener(new OnClickListener() { 

      public void onClick(View v) { 
       adapter.getFilter().filter(null); 
       //adapter.sort(comp); 
       view.showDropDown(); 
      } 
     }); 

bất cứ ai có thể tìm thấy bất cứ điều gì sai trái với những gì tôi đang làm?

EDIT: một số thông tin hơn, sau khi kết hợp thay đổi từ @Sam

private ArrayList<String> array = new ArrayList<String>(); 
private ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line, 
     array); 

private void setUpAutoComplete(final MultiAutoCompleteTextView view) 
{ 
    array.add("test string"); // this is successfully added to the drop down list 
    Collections.sort(array, comp); 
    adapter.notifyDataSetChanged(); 
} 

private void onSubmit() 
{ 
    array.add(getString()); // this fails to add 
    adapter.notifyDataSetChanged(); 
} 

Trả lời

9

nhưng những nỗ lực của tôi để sắp xếp dữ liệu thất bại

Đây là một chút mơ hồ. Nhưng tôi sẽ đoán.

Trước tiên, bạn làm điều gì đó không cần thiết:

return e1.toString().compareTo(e2.toString()); 

Kể từ e1e2 đã Strings bạn không cần phải gọi String#toString(). Cũng so sánh String cơ bản này đã tồn tại. Vì vậy, bạn không cần bất kỳ điều này.

Kỹ thuật tốt hơn là sắp xếp Danh sách, không phải là bộ điều hợp. Đơn giản chỉ cần sử dụng phương pháp phân loại bộ sưu tập:

List<String> list = new ArrayList<String>(); 
list.add(getString()); 
... 

Collections.sort(list); 
adapter.notifyDataSetChanged(); 

Thông báo tôi đã thay đổi adapter.add()-list.add(). Tôi đã làm điều này vì adapter.add() gọi list.add()adapter.notifyDataSetChanged() nhưng bộ điều hợp không nên được cập nhật cho đến khi sau danh sách mới được sắp xếp.

+0

Cảm ơn. Tôi đã thêm mã này vào phần thực thi khi tôi gửi, nhưng danh sách thả xuống không cập nhật chút nào với mục nhập mới. Khi tôi thêm mã vào phần nơi bộ điều hợp được khởi tạo tuy nhiên, chuỗi được thêm vào thành công được thêm vào.Does âm thanh này như một vấn đề với (chủ đề) không thể sửa đổi dữ liệu hiện có? – Flash

+1

Tôi không thấy nơi bạn đang sử dụng chủ đề hoặc ngữ cảnh tổng thể, vì vậy tôi không thể chắc chắn ... – Sam

+0

Xin lỗi, vui lòng xem chỉnh sửa của tôi về câu hỏi gốc. – Flash

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