Android Loaders

ByLearner beleza? Você sabe o que são loaders no Android?

Se você pensou que é aquele imagem que fica rodando para indicar que existe alguma coisa em processamento, você errou. Os loaders no Android são um tipo de classe que proporciona a execução de tarefas em paralelo.

Para criarmos um loader na nossa aplicação temos que seguir os passos abaixo.

Primeiro: Temos que criar a nossa classe loader que extende de “AsyncTaskLoader”.

class UserLoader(context: Context) :
        AsyncTaskLoader<ArrayList<User>>(context) {

    private var userList: ArrayList<User>? = null
    /**
     * Método chamado quando o loader é criado
     */
    override fun onStartLoading() {
        if (userList != null) {
            deliverResult(userList)
        }

        if (userList == null || takeContentChanged()) {
            forceLoad()
        }
    }

    /**
     * Método executado de forma asyncrona
     */
    override fun loadInBackground(): ArrayList<User>? {
        //fazer operações em paralelo
    }

    /**
     * Método que retorna o resultado do loader
     */
    override fun deliverResult(response: ArrayList<User>?) {
        if (isReset) {
            return
        }
        userList = response

        if (isStarted) {
            super.deliverResult(userList)
        }
    }

    /**
     * Método de reset do loader
     */
    override fun onReset() {
        userList = null
    }
}

Segundo: A classe que vamos utilizar o loader tem que extender o callback abaixo.

LoaderManager.LoaderCallbacks<ArrayList<User>>

Terceiro: No método onResume().

loaderManager.initLoader(LOADER_ID_GROUP, null, this)

Quarto: No método onPause().

loaderManager.getLoader<UserLoader>(LOADER_ID_GROUP)?.reset()

Quinto: Implementar os callbacks.

/**
     * Método que cria o Loader da view
     */
    override fun onCreateLoader(id: Int, args: Bundle?): Loader<ArrayList<User>> {
        return UserLoader(this)
    }

    /**
     * Método de callback para quando o loader está finalizado
     */
    override fun onLoadFinished(loader: Loader<ArrayList<User>>, data: ArrayList<User>) {
        //Executar ações quando terminar o load
    }

    /**
     * Método de reload do loader
     */
    override fun onLoaderReset(loader: Loader<ArrayList<ObViewGroup>>) {
    }

Deixe uma resposta