# LoaderManager

Artifact: [androidx.loader:loader](https://developer.android.com/jetpack/androidx/releases/loader) [View Source](https://cs.android.com/search?q=file:androidx/loader/app/LoaderManager.java+class:androidx.loader.app.LoaderManager) Added in [1.0.0](https://developer.android.com/jetpack/androidx/releases/loader#1.0.0)

*** ** * ** ***

<br />

```
public abstract class LoaderManager
```

<br />

*** ** * ** ***

Static library support version of the framework's `https://developer.android.com/reference/android/app/LoaderManager.html`. Used to write apps that run on platforms prior to Android 3.0. When running on Android 3.0 or above, this implementation is still used; it does not try to switch to the framework's implementation. See the framework SDK documentation for a class overview.

Your activity must derive from `https://developer.android.com/reference/androidx/fragment/app/FragmentActivity` to use this.

## Summary

| ### Nested types |
|---|
| `public interface https://developer.android.com/reference/androidx/loader/app/LoaderManager.LoaderCallbacks<D>` Callback interface for a client to interact with the manager. |

| ### Public constructors |
|---|
| `https://developer.android.com/reference/androidx/loader/app/LoaderManager#LoaderManager()()` |

| ### Public methods |
|---|---|
| `abstract void` | `@https://developer.android.com/reference/androidx/annotation/MainThread https://developer.android.com/reference/androidx/loader/app/LoaderManager#destroyLoader(int)(int id)` Stops and removes the loader with the given ID. |
| `abstract void` | `[dump](https://developer.android.com/reference/androidx/loader/app/LoaderManager#dump(java.lang.String,java.io.FileDescriptor,java.io.PrintWriter,java.lang.String[]))( @https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/java/lang/String.html prefix, @https://jspecify.dev/docs/api/org/jspecify/annotations/Nullable.html https://developer.android.com/reference/java/io/FileDescriptor.html fd, @https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/java/io/PrintWriter.html writer, @https://jspecify.dev/docs/api/org/jspecify/annotations/Nullable.html String[] args )` **This method is deprecated.** Use `https://developer.android.com/reference/androidx/loader/app/LoaderManager#enableDebugLogging(boolean)` to understand the series of operations performed by LoaderManager. <br /> |
| `static void` | `[enableDebugLogging](https://developer.android.com/reference/androidx/loader/app/LoaderManager#enableDebugLogging(boolean))(boolean enabled)` **This method is deprecated.** LoaderManager now respects `https://developer.android.com/reference/android/util/Log.html#isLoggable(java.lang.String, int)` for debug logging, allowing you to use `adb shell setprop log.tag.LoaderManager VERBOSE`. <br /> |
| `static @https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/androidx/loader/app/LoaderManager` | `<T extends https://developer.android.com/reference/androidx/lifecycle/LifecycleOwner & https://developer.android.com/reference/androidx/lifecycle/ViewModelStoreOwner> https://developer.android.com/reference/androidx/loader/app/LoaderManager#getInstance(T)(@https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html T owner)` Gets a LoaderManager associated with the given owner, such as a `https://developer.android.com/reference/androidx/fragment/app/FragmentActivity` or `https://developer.android.com/reference/androidx/fragment/app/Fragment`. |
| `abstract @https://jspecify.dev/docs/api/org/jspecify/annotations/Nullable.html https://developer.android.com/reference/androidx/loader/content/Loader<D>` | `<D> https://developer.android.com/reference/androidx/loader/app/LoaderManager#getLoader(int)(int id)` Return the Loader with the given id or null if no matching Loader is found. |
| `boolean` | `https://developer.android.com/reference/androidx/loader/app/LoaderManager#hasRunningLoaders()()` Returns true if any loaders managed are currently running and have not returned data to the application yet. |
| `abstract @https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/androidx/loader/content/Loader<D>` | `@https://developer.android.com/reference/androidx/annotation/MainThread <D> https://developer.android.com/reference/androidx/loader/app/LoaderManager#initLoader(int,android.os.Bundle,androidx.loader.app.LoaderManager.LoaderCallbacks<D>)( int id, @https://jspecify.dev/docs/api/org/jspecify/annotations/Nullable.html https://developer.android.com/reference/android/os/Bundle.html args, @https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/androidx/loader/app/LoaderManager.LoaderCallbacks<D> callback )` Ensures a loader is initialized and active. |
| `abstract void` | `https://developer.android.com/reference/androidx/loader/app/LoaderManager#markForRedelivery()()` Mark all Loaders associated with this LoaderManager for redelivery of their current data (if any), waiting for the next time the Loader is started if it is currently stopped. |
| `abstract @https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/androidx/loader/content/Loader<D>` | `@https://developer.android.com/reference/androidx/annotation/MainThread <D> https://developer.android.com/reference/androidx/loader/app/LoaderManager#restartLoader(int,android.os.Bundle,androidx.loader.app.LoaderManager.LoaderCallbacks<D>)( int id, @https://jspecify.dev/docs/api/org/jspecify/annotations/Nullable.html https://developer.android.com/reference/android/os/Bundle.html args, @https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/androidx/loader/app/LoaderManager.LoaderCallbacks<D> callback )` Starts a new or restarts an existing `https://developer.android.com/reference/android/content/Loader.html` in this manager, registers the callbacks to it, and (if the activity/fragment is currently started) starts loading it. |

| ### Extension functions |
|---|---|
| `final void` | `@https://developer.android.com/reference/androidx/annotation/MainThread <D extends https://developer.android.com/reference/java/lang/Object.html> https://developer.android.com/reference/androidx/loader/app/LoaderManagerKt.https://developer.android.com/reference/androidx/loader/app/LoaderManager#(androidx.loader.app.LoaderManager).initLoader(kotlin.Int,androidx.loader.content.Loader,kotlin.Function0,kotlin.Function1)( @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/loader/app/LoaderManager receiver, int id, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/loader/content/Loader<@https://developer.android.com/reference/androidx/annotation/NonNull D> loader, @https://developer.android.com/reference/androidx/annotation/NonNull Function0<https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html> onLoaderReset, @https://developer.android.com/reference/androidx/annotation/NonNull Function1<@https://developer.android.com/reference/androidx/annotation/NonNull data, https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html> onLoadFinished )` Ensures a loader is initialized and active. |
| `final void` | `@https://developer.android.com/reference/androidx/annotation/MainThread <D extends https://developer.android.com/reference/java/lang/Object.html> https://developer.android.com/reference/androidx/loader/app/LoaderManagerKt.https://developer.android.com/reference/androidx/loader/app/LoaderManager#(androidx.loader.app.LoaderManager).restartLoader(kotlin.Int,androidx.loader.content.Loader,kotlin.Function0,kotlin.Function1)( @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/loader/app/LoaderManager receiver, int id, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/loader/content/Loader<@https://developer.android.com/reference/androidx/annotation/NonNull D> loader, @https://developer.android.com/reference/androidx/annotation/NonNull Function0<https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html> onLoaderReset, @https://developer.android.com/reference/androidx/annotation/NonNull Function1<@https://developer.android.com/reference/androidx/annotation/NonNull data, https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html> onLoadFinished )` Starts a new or restarts an existing `https://developer.android.com/reference/androidx/loader/content/Loader` in this manager, registers the given `https://developer.android.com/reference/androidx/loader/app/package-summary#(androidx.loader.app.LoaderManager).restartLoader(kotlin.Int,androidx.loader.content.Loader,kotlin.Function0,kotlin.Function1)` and `https://developer.android.com/reference/androidx/loader/app/package-summary#(androidx.loader.app.LoaderManager).restartLoader(kotlin.Int,androidx.loader.content.Loader,kotlin.Function0,kotlin.Function1)` methods to it, and (if the activity/fragment is currently started) starts loading it. |

## Public constructors

### LoaderManager

Added in 1.0.0

```
public LoaderManager()
```

## Public methods

### destroyLoader

Added in [1.0.0](https://developer.android.com/jetpack/androidx/releases/loader#1.0.0)

```
@MainThread
public abstract void destroyLoader(int id)
```

Stops and removes the loader with the given ID. If this loader had previously reported data to the client through `https://developer.android.com/reference/androidx/loader/app/LoaderManager.LoaderCallbacks#onLoadFinished(androidx.loader.content.Loader<D>,D)`, a call will be made to `https://developer.android.com/reference/androidx/loader/app/LoaderManager.LoaderCallbacks#onLoaderReset(androidx.loader.content.Loader<D>)`.

Must be called from the process's main thread.

### dump

Added in [1.0.0](https://developer.android.com/jetpack/androidx/releases/loader#1.0.0) Deprecated in [1.0.0](https://developer.android.com/jetpack/androidx/releases/loader#1.0.0)

```
public abstract void [dump](https://developer.android.com/reference/androidx/loader/app/LoaderManager#dump(java.lang.String,java.io.FileDescriptor,java.io.PrintWriter,java.lang.String[]))(
    @NonNull String prefix,
    @Nullable FileDescriptor fd,
    @NonNull PrintWriter writer,
    @Nullable String[] args
)
```

> [!CAUTION]
> **This method is deprecated.**   
>
> Use `https://developer.android.com/reference/androidx/loader/app/LoaderManager#enableDebugLogging(boolean)` to understand the series of operations performed by LoaderManager.

Print the LoaderManager's state into the given stream.

| Parameters |
|---|---|
| `@https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/java/lang/String.html prefix` | Text to print at the front of each line. |
| `@https://jspecify.dev/docs/api/org/jspecify/annotations/Nullable.html https://developer.android.com/reference/java/io/FileDescriptor.html fd` | The raw file descriptor that the dump is being sent to. |
| `@https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/java/io/PrintWriter.html writer` | A PrintWriter to which the dump is to be set. |
| `@https://jspecify.dev/docs/api/org/jspecify/annotations/Nullable.html String[] args` | Additional arguments to the dump request. |

### enableDebugLogging

Added in [1.0.0](https://developer.android.com/jetpack/androidx/releases/loader#1.0.0) Deprecated in [1.2.0](https://developer.android.com/jetpack/androidx/releases/loader#1.2.0)

```
public static void [enableDebugLogging](https://developer.android.com/reference/androidx/loader/app/LoaderManager#enableDebugLogging(boolean))(boolean enabled)
```

> [!CAUTION]
> **This method is deprecated.**   
>
> LoaderManager now respects `https://developer.android.com/reference/android/util/Log.html#isLoggable(java.lang.String, int)` for debug logging, allowing you to use `adb shell setprop log.tag.LoaderManager VERBOSE`.

Control whether the framework's internal loader manager debugging logs are turned on. If enabled, you will see output in logcat as the framework performs loader operations.

| See also |
|---|---|
| `https://developer.android.com/reference/android/util/Log.html#isLoggable(java.lang.String, int)` |   |

### getInstance

Added in [1.0.0](https://developer.android.com/jetpack/androidx/releases/loader#1.0.0)

```
public static @NonNull LoaderManager <T extends LifecycleOwner & ViewModelStoreOwner> getInstance(@NonNull T owner)
```

Gets a LoaderManager associated with the given owner, such as a `https://developer.android.com/reference/androidx/fragment/app/FragmentActivity` or `https://developer.android.com/reference/androidx/fragment/app/Fragment`.

| Parameters |
|---|---|
| `<T extends https://developer.android.com/reference/androidx/lifecycle/LifecycleOwner & https://developer.android.com/reference/androidx/lifecycle/ViewModelStoreOwner>` | A class that maintains its own `https://developer.android.com/reference/androidx/lifecycle/Lifecycle` and `https://developer.android.com/reference/androidx/lifecycle/ViewModelStore`. For instance, `https://developer.android.com/reference/androidx/fragment/app/FragmentActivity` or `https://developer.android.com/reference/androidx/fragment/app/Fragment`. |
| `@https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html T owner` | The owner that should be used to create the returned LoaderManager |

| Returns |
|---|---|
| `@https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/androidx/loader/app/LoaderManager` | A valid LoaderManager |

### getLoader

Added in [1.0.0](https://developer.android.com/jetpack/androidx/releases/loader#1.0.0)

```
public abstract @Nullable Loader<D> <D> getLoader(int id)
```

Return the Loader with the given id or null if no matching Loader is found.

### hasRunningLoaders

Added in [1.0.0](https://developer.android.com/jetpack/androidx/releases/loader#1.0.0)

```
public boolean hasRunningLoaders()
```

Returns true if any loaders managed are currently running and have not returned data to the application yet.

### initLoader

Added in [1.0.0](https://developer.android.com/jetpack/androidx/releases/loader#1.0.0)

```
@MainThread
public abstract @NonNull Loader<D> <D> initLoader(
    int id,
    @Nullable Bundle args,
    @NonNull LoaderManager.LoaderCallbacks<D> callback
)
```

Ensures a loader is initialized and active. If the loader doesn't already exist, one is created and (if the activity/fragment is currently started) starts the loader. Otherwise the last created loader is re-used.

In either case, the given callback is associated with the loader, and will be called as the loader state changes. If at the point of call the caller is in its started state, and the requested loader already exists and has generated its data, then callback `https://developer.android.com/reference/androidx/loader/app/LoaderManager.LoaderCallbacks#onLoadFinished(androidx.loader.content.Loader<D>,D)` will be called immediately (inside of this function), so you must be prepared for this to happen.

Must be called from the process's main thread.

| Parameters |
|---|---|
| `int id` | A unique identifier for this loader. Can be whatever you want. Identifiers are scoped to a particular LoaderManager instance. |
| `@https://jspecify.dev/docs/api/org/jspecify/annotations/Nullable.html https://developer.android.com/reference/android/os/Bundle.html args` | Optional arguments to supply to the loader at construction. If a loader already exists (a new one does not need to be created), this parameter will be ignored and the last arguments continue to be used. |
| `@https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/androidx/loader/app/LoaderManager.LoaderCallbacks<D> callback` | Interface the LoaderManager will call to report about changes in the state of the loader. Required. |

### markForRedelivery

Added in [1.0.0](https://developer.android.com/jetpack/androidx/releases/loader#1.0.0)

```
public abstract void markForRedelivery()
```

Mark all Loaders associated with this LoaderManager for redelivery of their current data (if any), waiting for the next time the Loader is started if it is currently stopped. In cases where no data has yet been delivered, this is effectively a no-op. In cases where data has already been delivered via `https://developer.android.com/reference/androidx/loader/app/LoaderManager.LoaderCallbacks#onLoadFinished(androidx.loader.content.Loader<D>,D)`, this will ensure that `https://developer.android.com/reference/androidx/loader/app/LoaderManager.LoaderCallbacks#onLoadFinished(androidx.loader.content.Loader<D>,D)` is called again with the same data.

Call this only if you are implementing a `https://developer.android.com/reference/androidx/lifecycle/LifecycleOwner` where the views/elements that developers are likely to use in `https://developer.android.com/reference/androidx/loader/app/LoaderManager.LoaderCallbacks#onLoadFinished(androidx.loader.content.Loader<D>,D)` can be created and destroyed multiple times without the `https://developer.android.com/reference/androidx/lifecycle/LifecycleOwner` itself being destroyed. Call this when the views/elements are being destroyed to ensure that the data is redelivered upon recreation.

### restartLoader

Added in [1.0.0](https://developer.android.com/jetpack/androidx/releases/loader#1.0.0)

```
@MainThread
public abstract @NonNull Loader<D> <D> restartLoader(
    int id,
    @Nullable Bundle args,
    @NonNull LoaderManager.LoaderCallbacks<D> callback
)
```

Starts a new or restarts an existing `https://developer.android.com/reference/android/content/Loader.html` in this manager, registers the callbacks to it, and (if the activity/fragment is currently started) starts loading it. If a loader with the same id has previously been started it will automatically be destroyed when the new loader completes its work. The callback will be delivered before the old loader is destroyed.

Must be called from the process's main thread.

| Parameters |
|---|---|
| `int id` | A unique identifier for this loader. Can be whatever you want. Identifiers are scoped to a particular LoaderManager instance. |
| `@https://jspecify.dev/docs/api/org/jspecify/annotations/Nullable.html https://developer.android.com/reference/android/os/Bundle.html args` | Optional arguments to supply to the loader at construction. |
| `@https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/androidx/loader/app/LoaderManager.LoaderCallbacks<D> callback` | Interface the LoaderManager will call to report about changes in the state of the loader. Required. |

## Extension functions

### LoaderManagerKt.initLoader

Artifact: [androidx.loader:loader](https://developer.android.com/jetpack/androidx/releases/loader) [View Source](https://cs.android.com/search?q=file:androidx/loader/app/LoaderManager.kt+function:initLoader)

```
@MainThread
public final void <D extends Object> LoaderManagerKt.initLoader(
    @NonNull LoaderManager receiver,
    int id,
    @NonNull Loader<@NonNull D> loader,
    @NonNull Function0<Unit> onLoaderReset,
    @NonNull Function1<@NonNull data, Unit> onLoadFinished
)
```

Ensures a loader is initialized and active. If the loader doesn't already exist, the given `https://developer.android.com/reference/androidx/loader/app/package-summary#(androidx.loader.app.LoaderManager).initLoader(kotlin.Int,androidx.loader.content.Loader,kotlin.Function0,kotlin.Function1)` is used and (if the activity/fragment is currently started) starts the loader. Otherwise the last created loader is re-used and `https://developer.android.com/reference/androidx/loader/app/package-summary#(androidx.loader.app.LoaderManager).initLoader(kotlin.Int,androidx.loader.content.Loader,kotlin.Function0,kotlin.Function1)` is ignored.

In either case, the given `https://developer.android.com/reference/androidx/loader/app/package-summary#(androidx.loader.app.LoaderManager).initLoader(kotlin.Int,androidx.loader.content.Loader,kotlin.Function0,kotlin.Function1)` and `https://developer.android.com/reference/androidx/loader/app/package-summary#(androidx.loader.app.LoaderManager).initLoader(kotlin.Int,androidx.loader.content.Loader,kotlin.Function0,kotlin.Function1)` methods will be associated with the loader, and will be called as the loader state changes. If at the point of call the caller is in its started state, and the requested loader already exists and has generated its data, then callback `https://developer.android.com/reference/androidx/loader/app/package-summary#(androidx.loader.app.LoaderManager).initLoader(kotlin.Int,androidx.loader.content.Loader,kotlin.Function0,kotlin.Function1)` will be called immediately (inside of this function), so you must be prepared for this to happen.

```
LoaderManager.getInstance(this).initLoader(LOADER_ID, MyLoader()) { data ->
  // Handle onLoadFinished
}

// Or, if you need an onLoaderReset callback:
LoaderManager.getInstance(this).initLoader(LOADER_ID, MyLoader(), {
  // Handle onLoaderReset
}) { data ->
  // Handle onLoadFinished
}
```

| Parameters |
|---|---|
| `int id` | A unique identifier for this loader. Can be whatever you want. Identifiers are scoped to a particular LoaderManager instance. |
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/loader/content/Loader<@https://developer.android.com/reference/androidx/annotation/NonNull D> loader` | The `https://developer.android.com/reference/androidx/loader/content/Loader` to be used when no loader is already created with this `https://developer.android.com/reference/androidx/loader/app/package-summary#(androidx.loader.app.LoaderManager).initLoader(kotlin.Int,androidx.loader.content.Loader,kotlin.Function0,kotlin.Function1)`. |
| `@https://developer.android.com/reference/androidx/annotation/NonNull Function0<https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html> onLoaderReset` | Lambda to call to handle `https://developer.android.com/reference/androidx/loader/app/LoaderManager.LoaderCallbacks#onLoaderReset(androidx.loader.content.Loader<D>)` |
| `@https://developer.android.com/reference/androidx/annotation/NonNull Function1<@https://developer.android.com/reference/androidx/annotation/NonNull data, https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html> onLoadFinished` | Lambda to call to handle `https://developer.android.com/reference/androidx/loader/app/LoaderManager.LoaderCallbacks#onLoadFinished(androidx.loader.content.Loader<D>,D)` |

### LoaderManagerKt.restartLoader

Artifact: [androidx.loader:loader](https://developer.android.com/jetpack/androidx/releases/loader) [View Source](https://cs.android.com/search?q=file:androidx/loader/app/LoaderManager.kt+function:restartLoader)

```
@MainThread
public final void <D extends Object> LoaderManagerKt.restartLoader(
    @NonNull LoaderManager receiver,
    int id,
    @NonNull Loader<@NonNull D> loader,
    @NonNull Function0<Unit> onLoaderReset,
    @NonNull Function1<@NonNull data, Unit> onLoadFinished
)
```

Starts a new or restarts an existing `https://developer.android.com/reference/androidx/loader/content/Loader` in this manager, registers the given `https://developer.android.com/reference/androidx/loader/app/package-summary#(androidx.loader.app.LoaderManager).restartLoader(kotlin.Int,androidx.loader.content.Loader,kotlin.Function0,kotlin.Function1)` and `https://developer.android.com/reference/androidx/loader/app/package-summary#(androidx.loader.app.LoaderManager).restartLoader(kotlin.Int,androidx.loader.content.Loader,kotlin.Function0,kotlin.Function1)` methods to it, and (if the activity/fragment is currently started) starts loading it. If a loader with the same id has previously been started it will automatically be destroyed when the new loader completes its work.

```
LoaderManager.getInstance(this).restartLoader(LOADER_ID, MyLoader()) { data ->
  // Handle onLoadFinished
}

// Or, if you need an onLoaderReset callback:
LoaderManager.getInstance(this).restartLoader(LOADER_ID, MyLoader(), {
  // Handle onLoaderReset
}) { data ->
  // Handle onLoadFinished
}
```

| Parameters |
|---|---|
| `int id` | A unique identifier for this loader. Can be whatever you want. Identifiers are scoped to a particular LoaderManager instance. |
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/loader/content/Loader<@https://developer.android.com/reference/androidx/annotation/NonNull D> loader` | The `https://developer.android.com/reference/androidx/loader/content/Loader` to be used |
| `@https://developer.android.com/reference/androidx/annotation/NonNull Function0<https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html> onLoaderReset` | Lambda to call to handle `https://developer.android.com/reference/androidx/loader/app/LoaderManager.LoaderCallbacks#onLoaderReset(androidx.loader.content.Loader<D>)` |
| `@https://developer.android.com/reference/androidx/annotation/NonNull Function1<@https://developer.android.com/reference/androidx/annotation/NonNull data, https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html> onLoadFinished` | Lambda to call to handle `https://developer.android.com/reference/androidx/loader/app/LoaderManager.LoaderCallbacks#onLoadFinished(androidx.loader.content.Loader<D>,D)` |