Seu código é um pouco difícil de entender devido à má formatação.
De qualquer forma, a resposta fornecida não é realmente uma correção. O cursor retornou em
onLoadFinished
deve ser garantido para não ser fechado, então você está carregando o cursor da maneira errada. Especificamente, quando você chama adapter.getFilter().filter(s.toString());
Eu realmente não entendo o que está acontecendo aqui, mas eu entendo que você deveria fazer outra coisa. Basta armazenar o filtro de consulta em um campo dentro do seu
Fragment
e execute getLoaderManager().restartLoader(DRINKS_LIST_LOADER, null, this);
. Observe que você executa restartLoader
, e não initLoader
, porque você tem dados diferentes que deseja consultar. No seu
onCreateLoader
, você deve usar o filtro armazenado como uma variável de instância para a selection
. Alguns antecedentes
initLoader
carrega os dados que foram carregados na última execução, caso tenham sido executados antes. É por isso que você chama o método de inicialização do seu Fragment/Activity. Isso é útil porque você não terá que repetir a mudança de orientação. restartLoader
limpa os dados carregados anteriormente para que você obtenha um novo Loader
trabalhar com (provavelmente) dados diferentes. Se você ainda não tem certeza do que está fazendo, certifique-se de ler este artigo, que é um artigo introdutório muito bom sobre Loaders com código de exemplo que se parece muito com o que você deseja alcançar. As carregadeiras são bastante enigmáticas no começo, mas quando você pega o jeito, é uma navegação tranquila.