Вашият код е малко труден за разбиране поради лошо форматиране.
Както и да е, предоставеният отговор всъщност не е решение. Курсорът се върна в onLoadFinished
трябва да се гарантира, че няма да бъде затворен, така че зареждате курсора си по грешен начин. По-конкретно, когато се обадите
adapter.getFilter().filter(s.toString());
Наистина не разбирам какво става тук, но разбирам, че трябва да направите нещо друго. Просто съхранете филтъра на заявката в поле във вашия Fragment
и стартирайте getLoaderManager().restartLoader(DRINKS_LIST_LOADER, null, this);
. Имайте предвид, че стартирате restartLoader
, а не initLoader
, защото имате различни данни, за които искате да поискате.
Във вашия onCreateLoader
, трябва да използвате филтъра, който сте съхранили като променлива на екземпляра за selection
.
Малък фон
initLoader
зарежда данните, които са били заредени при последното изпълнение, ако са се изпълнявали преди. Ето защо извиквате метода за инициализация на вашия фрагмент/активност. Това е удобно, защото няма да ви се налага да правите заявка за промяна на ориентацията.
restartLoader
почиства предварително заредените данни, така че да получите нов Loader
за работа с (вероятно) различни данни.
Ако все още не сте сигурни какво правите, не забравяйте да прочетете тази статия, която е много добра уводна статия за Loaders с примерен код, който много прилича на това, което искате да постигнете. Товарачите в началото са доста загадъчни, но след като се овладеете, става плавно.