Модераторы: javastic
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Фильтрация в ListView 
V
    Опции темы
TechnoMag
Дата 7.8.2014, 17:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 122
Регистрация: 20.3.2010

Репутация: нет
Всего: нет



Не получается реализовать фильтрацию в ListView при вводе в EditText.
1. Использую SimpleCursorAdapter
2. ListView размещается на фрагменте (на него и грешу)
3. Android 2.2 (API 8)

Код

public class DepartmentsActivity extends Fragment {
    
     private EditText edCityName;
     private Context mContext;
     
     private MyDB myDB;
        
     private SimpleCursorAdapter scAdapter;

     private ListView listviewCities;
        
     private String[] from;
     private int[] to;

     private String selectedId = "";
             
     @Override
     public View onCreateView(LayoutInflater inflater, ViewGroup container,
          Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.activity_department_list, null);
        
        mContext = getActivity().getApplicationContext();
        
        // подключаемся к базе
        myDB = MyDB.getInstance(mContext);
         myDB.getCityList(); // тут select из однотабличной базы с (_id, CityName)
        
        edCityName = (EditText) view.findViewById(R.id.editCityName);
        listviewCities = (ListView) view.findViewById(R.id.listViewCities);
        
        getActivity().startManagingCursor(myDB.getSelectCursor());
        
        from = new String[]{myDB.COLUMN_CITY};
        to = new int[]{R.id.textCityName};
        
        scAdapter = new SimpleCursorAdapter(mContext, R.layout.departments_city_item, myDB.getSelectCursor(), from , to);
        //scAdapter.setViewBinder(new DBBinder());
        listviewCities.setAdapter(scAdapter);
        listviewCities.setTextFilterEnabled(true);
        
        edCityName.addTextChangedListener(new TextWatcher() {
            public void afterTextChanged(Editable s) {
            }
          
            public void beforeTextChanged(CharSequence s, int start, 
              int count, int after) {
            }
          
            public void onTextChanged(CharSequence s, int start, 
              int before, int count) {
                 scAdapter.getFilter().filter("Киев"); // тут пытаюсь отфильтровать, но не работает
                 scAdapter.notifyDataSetChanged();
                 scAdapter.notifyDataSetInvalidated();
            }
           });
        return view;
     }
}

PM MAIL ICQ   Вверх
TechnoMag
Дата 8.8.2014, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 122
Регистрация: 20.3.2010

Репутация: нет
Всего: нет



проблема в общем-то решена:

1. Адаптеру назначил FilterQueryPropvider

Код

       scAdapter.setFilterQueryProvider(new FilterQueryProvider() {
            @Override
            public Cursor runQuery(CharSequence charSequence) {
             if (charSequence.length()==0)
             {
                     myDB.getCityList();
                 return myDB.getSelectCursor();
             }
             else
                 return myDB.getCityByName(charSequence.toString());
            }
        });


2. Немного изменил слушатель редактора - удалил эти строки:

   
Код

             scAdapter.notifyDataSetChanged();
                 scAdapter.notifyDataSetInvalidated();



PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Android | Следующая тема »


 




[ Время генерации скрипта: 0.0374 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.