# StorageStrategy

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

*** ** * ** ***


```
public abstract class StorageStrategy<K>
```

<br />

*** ** * ** ***

Strategy for storing keys in saved state. Extend this class when using custom key types that aren't supported by default. Prefer use of builtin storage strategies: `https://developer.android.com/reference/androidx/recyclerview/selection/StorageStrategy#createStringStorage()`, `https://developer.android.com/reference/androidx/recyclerview/selection/StorageStrategy#createLongStorage()`, `https://developer.android.com/reference/androidx/recyclerview/selection/StorageStrategy#createParcelableStorage(java.lang.Class<K>)`.

See `https://developer.android.com/reference/androidx/recyclerview/selection/SelectionTracker.Builder` for more detailed advice on which key type to use for your selection keys.

| Parameters |
|---|---|
| `<K>` | Selection key type. Built in support is provided for String, Long, and Parcelable types. Use the respective factory method to create a StorageStrategy instance appropriate to the desired type. `https://developer.android.com/reference/androidx/recyclerview/selection/StorageStrategy#createStringStorage()`, `https://developer.android.com/reference/androidx/recyclerview/selection/StorageStrategy#createParcelableStorage(java.lang.Class<K>)`, `https://developer.android.com/reference/androidx/recyclerview/selection/StorageStrategy#createLongStorage()` |

## Summary

| ### Public constructors |
|---|
| `https://developer.android.com/reference/androidx/recyclerview/selection/StorageStrategy#StorageStrategy(java.lang.Class<K>)(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/Class.html<K> type)` Creates a new instance. |

| ### Public methods |
|---|---|
| `abstract @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/os/Bundle.html` | `https://developer.android.com/reference/androidx/recyclerview/selection/StorageStrategy#asBundle(androidx.recyclerview.selection.Selection<K>)(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/recyclerview/selection/Selection<K> selection)` Creates a `https://developer.android.com/reference/android/os/Bundle.html` from supplied `https://developer.android.com/reference/androidx/recyclerview/selection/Selection`. |
| `abstract @https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/recyclerview/selection/Selection<K>` | `https://developer.android.com/reference/androidx/recyclerview/selection/StorageStrategy#asSelection(android.os.Bundle)(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/os/Bundle.html state)` Create a `https://developer.android.com/reference/androidx/recyclerview/selection/Selection` from supplied `https://developer.android.com/reference/android/os/Bundle.html`. |
| `static @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/recyclerview/selection/StorageStrategy<https://developer.android.com/reference/java/lang/Long.html>` | `https://developer.android.com/reference/androidx/recyclerview/selection/StorageStrategy#createLongStorage()()` |
| `static @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/recyclerview/selection/StorageStrategy<K>` | `<K extends https://developer.android.com/reference/android/os/Parcelable.html> https://developer.android.com/reference/androidx/recyclerview/selection/StorageStrategy#createParcelableStorage(java.lang.Class<K>)(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/Class.html<K> type)` |
| `static @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/recyclerview/selection/StorageStrategy<https://developer.android.com/reference/java/lang/String.html>` | `https://developer.android.com/reference/androidx/recyclerview/selection/StorageStrategy#createStringStorage()()` |

## Public constructors

### StorageStrategy

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

```
public StorageStrategy(@NonNull Class<K> type)
```

Creates a new instance.

| Parameters |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/Class.html<K> type` | the key type class that is being used. |

## Public methods

### asBundle

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

```
public abstract @NonNull Bundle asBundle(@NonNull Selection<K> selection)
```

Creates a `https://developer.android.com/reference/android/os/Bundle.html` from supplied `https://developer.android.com/reference/androidx/recyclerview/selection/Selection`.

| Parameters |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/recyclerview/selection/Selection<K> selection` | The selection to asBundle. |

### asSelection

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

```
public abstract @Nullable Selection<K> asSelection(@NonNull Bundle state)
```

Create a `https://developer.android.com/reference/androidx/recyclerview/selection/Selection` from supplied `https://developer.android.com/reference/android/os/Bundle.html`.

| Parameters |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/os/Bundle.html state` | Bundle instance that may contain parceled Selection instance. |

### createLongStorage

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

```
public static @NonNull StorageStrategy<Long> createLongStorage()
```

| Returns |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/recyclerview/selection/StorageStrategy<https://developer.android.com/reference/java/lang/Long.html>` | StorageStrategy suitable for use with `https://developer.android.com/reference/java/lang/Long.html` keys. |

### createParcelableStorage

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

```
public static @NonNull StorageStrategy<K> <K extends Parcelable> createParcelableStorage(@NonNull Class<K> type)
```

| Returns |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/recyclerview/selection/StorageStrategy<K>` | StorageStrategy suitable for use with `https://developer.android.com/reference/android/os/Parcelable.html` keys (like `https://developer.android.com/reference/android/net/Uri.html`). |

### createStringStorage

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

```
public static @NonNull StorageStrategy<String> createStringStorage()
```

| Returns |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/recyclerview/selection/StorageStrategy<https://developer.android.com/reference/java/lang/String.html>` | StorageStrategy suitable for use with `https://developer.android.com/reference/java/lang/String.html` keys. |