SQLite
 sql >> Base de Dados >  >> RDS >> SQLite

Android - tente reabrir um objeto já fechado:SQLiteQuery usando loaderManager


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.