#java #android #sqlite
После удалении из БД данных надо обновить ListView чтобы отображать изменении. Но Студия говорит что requery() is deprecated . Какую функцию можно использовать вместе него? Вот здесь говорят что надо повторно вызвать курсор. Но я не понял как это надо делать. UPD: Скопировал первый код и заново вызвал курсор этим кодом не помогло. cursor = mSqLiteDatabase.rawQuery("select * from "+ DatabaseHelper.DATABASE_TABLE, null);
Ответы
Ответ 1
Решил проблему таким образом. Сначала повторно вызвал курсор тем кодом которым он был создан. cursor = mSqLiteDatabase.rawQuery("select * from "+ DatabaseHelper.DATABASE_TABLE, null); Потом использовал функции SimpleCursorAdapter : userAdapter.swapCursor(cursor); userAdapter.notifyDataSetChanged(); Работает как надо. Первым делом вызываем курсор снова потом используем вышеперечисленные методы. Всё вместе выглядит так: cursor = mSqLiteDatabase.rawQuery("select * from "+ DatabaseHelper.DATABASE_TABLE, null); userAdapter.swapCursor(cursor); userAdapter.notifyDataSetChanged(); PS1. В решении проблемы помогла вот это PS2. Если у вас нет SimpleCursorAdapter надо его создать чем то похожим на вот это: userAdapter = new SimpleCursorAdapter(this, R.layout.siyahi_obyekti, cursor, headers, new int[]{R.id.textView5, R.id.textView6,R.id.textView7}, 0); siyahi.setAdapter(userAdapter);Ответ 2
Вы не поняли главной цели Гугла (Андроида) по изменению политики к курсорам. Идея состоит в том, чтобы вывести процесс загрузки курсора из основного потока, в фоновый, который бы не тормозил работу приложения для пользователя. ДА, Вы воспользовались командой swapCursor(cursor); но это как к японскому автомобилю березовая тяга. Эта команда предназначена для того, чтобы обновить данные в основном потоке на УЖЕ загруженный в фоновом режиме курсор. Изменения работы с курсором - большая тема, и там нельзя отделаться несколькими командами. Советую изучить КурсорЛоудеры или, хотя бы ассинхронные задачи, это первое. А второе - Контент Провайдеры, если нужно обмениваться инфо с другими приложениями. Хотя фанаты лепят их везде.