SearchView не фильтрует элементы ListView с пробелами

У меня есть SearchView и ListView. Я использую следующий код для фильтрации элементов ListView в моем методе onCreate

 ListAdapter listAdapter = new ListAdapter(this, ChainageFactory.getAllListViewItems());
 listView.setAdapter(listAdapter);
 listView.setTextFilterEnabled(true);
 filter = listAdapter.getFilter();
 searchView.setIconifiedByDefault(false);
 searchView.setOnQueryTextListener(this);
 searchView.setSubmitButtonEnabled(true);
 searchView.setQueryHint("Search Here");

Ниже приведены мои методы onQueryTextChange и onQueryTextSubmit.

@Override
    public boolean onQueryTextChange(String newText) {
        if (TextUtils.isEmpty(newText)) {
            filter.filter(null);
        } else {
            filter.filter(newText);
        }
        return true;
    }

    public boolean onQueryTextSubmit(String query) {
        return false;
    }

Мой ListView состоит из следующих элементов.

  1. DIK70300-DI K7 Диаметр 300 мм
  2. DIK70300-DI K7 Диаметр 400 мм
  3. AIK70300-DI D7 450 мм диам.
  4. AIK70300-DI D7 500 мм диам.

Я могу фильтровать элементы ListView, если пользователь вводит DI или AI, но в случае, если пользователь вводит D7, за которым следует пробел, или если пользователь вводит K7, за которым следует пробел, он не фильтрует элементы ListView, хотя есть элементы с этими символами. Как я могу разобраться в этом?


person Community    schedule 22.09.2016    source источник


Ответы (2)


Выполните фильтрацию в вашем фактическом списке, а не в listAdapter

@Override
public boolean onQueryTextChange(String newText) {

    for(int i = 0; i < ChainageFactory.getAllListViewItems().size(); i++){
        if (TextUtils.isEmpty(newText)) {
            filter.filter(null);
        } else {
            String itemName = ChainageFactory.getAllListViewItems().YourItem();

            if(itemName.contains(newText)){
                //Perform your operation with filtered data
            }
        }
    }
    return true;
}

public boolean onQueryTextSubmit(String query) {
    return false;
}
person Uttam Panchasara    schedule 22.09.2016

Пытаюсь поместить .trim() в вашу функцию. Для меня это сработало хорошо.

person Marco Ferretti    schedule 22.09.2016