2012-02-23 40 views
5

Tôi muốn lọc listView bằng cách sử dụng hộp EditText và sử dụng chức năng bộ chuyển đổi getFilter(). Nó hoạt động tốt cho đến khi tôi đặt một ký tự khoảng trắng trong hộp văn bản.Bộ lọc cho android ListView - Space Character

Chỉnh sửa: Đó là một SimpleAdapter không ArrayAdapter

Nếu danh sách của tôi chứa những lời này: { "Apple", "chuối", "Red Apple"} Nếu tôi gõ "quả táo" nó sẽ trở lại tất cả các các mục có chứa từ táo trong đó (Apple và Red Apple). Nếu tôi nhập "quả táo", nó sẽ không trả lại bất cứ thứ gì.

Bất kỳ ý tưởng nào? Dưới đây là các mã:

searchBox = (EditText) findViewById(R.id.searchBox); 

searchBox.addTextChangedListener(filterTextWatcher); 

private TextWatcher filterTextWatcher = new TextWatcher() { 

public void onTextChanged(CharSequence s, int start, int before, int count) { 
    // TODO Auto-generated method stub   
} 

public void beforeTextChanged(CharSequence s, int start, int count, 
      int after) { 
    // TODO Auto-generated method stub   
} 

public void afterTextChanged(Editable s) { 
    // TODO Auto-generated method stub 
    myAdapter.getFilter().filter(s.toString()); 
} 
}; 
+0

Bạn đã bao giờ tìm ra điều này chưa? –

+0

Tôi không xin lỗi. Tôi nghĩ rằng giải pháp có thể là để làm cho bộ chuyển đổi của riêng bạn dựa trên một ArrayAdapter nhưng tôi đã không cố gắng (ngừng làm việc trên dự án đó). – Chris911

+0

@CaptainProg Bạn đang tìm kiếm loại câu trả lời nào? Với câu hỏi ban đầu được đặt ra bằng cách sử dụng 'trim()' là câu trả lời hay nhất. – Sam

Trả lời

2

Nếu các chức năng lọc từ SimpleAdapter không đáp ứng yêu cầu lọc của bạn, bạn sẽ cần phải ghi đè lên SimpleAdapter và thực hiện các yêu cầu lọc của riêng bạn.

Điều này đòi hỏi nhiều mã, vì Bộ lọc trong SimpleAdapter đang sử dụng nhiều đối tượng riêng tư, mà bạn sẽ cần phải sao chép. Cùng một aplies cho ArrayAdapter

Fortunatly, một người nào khác (@ uʍop ǝpısdn) đã tham gia quy trình, đã viết mã và cung cấp mã đó cho cộng đồng.

Bạn có thể tìm liên kết đến là blog here bao gồm cách sử dụng các ví dụ và mã trong here.

Trân trọng.

+0

Tôi nghĩ đây là giải pháp hợp lệ duy nhất. Đã một thời gian kể từ khi tôi hỏi câu hỏi này và tôi không làm việc trên dự án đó nữa nhưng tôi sẽ cố gắng xác thực. Cảm ơn. – Chris911

+0

Chính xác. Các vấn đề được mô tả phát sinh do dòng này: 'String [] words = str.split (" ");' trong ** SimpleAdapter.SimpleFilter ** lớp, mà chỉ đơn giản là bỏ qua các không gian từ các chuỗi ban đầu của bạn, tách chúng thành các từ. –

+0

@Luis Tôi có vấn đề tương tự và tôi đã đăng câu hỏi http: // stackoverflow.com/questions/39573432/get-filter-does-not-work-cho-không gian-in-android Tôi hy vọng bạn có thể giúp đỡ. – AndroidNewBee

2

Hãy thử sử dụng này:

myAdapter.getFilter().filter(s.toString().trim()); 
+0

Điều này chỉ hoạt động một phần vì nó loại bỏ không gian nhưng chúng ta hãy nói tôi gõ vào "Red Ap" nó sẽ cắt nó thành "RedAp" và không có từ trong lựa chọn của tôi có chứa "RedAp". Vì vậy, về cơ bản nó sửa chữa vấn đề nếu tôi đặt một "" đơn trước hoặc sau một từ nhưng không đưa ra kết quả mà tôi muốn. – Chris911

+2

@ Chris911: nó sẽ không thực sự.trimming có nghĩa là, nó chỉ đơn giản là loại bỏ không gian trước và sau khi văn bản bắt đầu và dừng tương ứng. Nếu bạn gõ "apple" thì nó sẽ cắt nó thành "apple" nhưng nếu bạn gõ " đỏ ap ", nó sẽ mất nó như it.got điểm? – Hiral

+0

Cảm ơn lời giải thích Hiral nhưng điều đó vẫn không khắc phục được sự cố. Tôi bắt đầu nghĩ rằng cách duy nhất để làm điều này là để thực hiện bộ chuyển đổi của riêng tôi với bộ lọc của riêng tôi. – Chris911

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