# ItemKeyProvider

# ItemKeyProvider

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/ItemKeyProvider.java+class:androidx.recyclerview.selection.ItemKeyProvider)  
Added in[1.0.0](https://developer.android.com/jetpack/androidx/releases/recyclerview#1.0.0)

*** ** * ** ***

Kotlin\|[Java](https://developer.android.com/reference/androidx/recyclerview/selection/ItemKeyProvider "View this page in Java")

<br />

```
abstract class ItemKeyProvider<K>
```

<br />

Known direct subclasses  
[StableIdKeyProvider](https://developer.android.com/reference/kotlin/androidx/recyclerview/selection/StableIdKeyProvider)  

|---------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| [StableIdKeyProvider](https://developer.android.com/reference/kotlin/androidx/recyclerview/selection/StableIdKeyProvider) | An[ItemKeyProvider](https://developer.android.com/reference/kotlin/androidx/recyclerview/selection/ItemKeyProvider)that provides stable ids by way of cached[RecyclerView.Adapter](https://developer.android.com/reference/kotlin/androidx/recyclerview/widget/RecyclerView.Adapter)stable ids. |

*** ** * ** ***

Provides selection library access to stable selection keys identifying items presented by a[RecyclerView](https://developer.android.com/reference/kotlin/androidx/recyclerview/widget/RecyclerView)instance.  

| Parameters |
|------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `<K>`      | Selection key type. @see[StorageStrategy](https://developer.android.com/reference/kotlin/androidx/recyclerview/selection/StorageStrategy)for supported types. |

## Summary

|                                                                                                                                                                                                                             ### Nested types                                                                                                                                                                                                                              |
|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `@`[IntDef](https://developer.android.com/reference/kotlin/androidx/annotation/IntDef)`(value = )` `@`[Retention](https://developer.android.com/reference/java/lang/annotation/Retention.html)`(value = `[RetentionPolicy.SOURCE](https://developer.android.com/reference/java/lang/annotation/RetentionPolicy.html#SOURCE)`)` `annotation `[ItemKeyProvider.Scope](https://developer.android.com/reference/kotlin/androidx/recyclerview/selection/ItemKeyProvider.Scope) |

|                                    ### Constants                                    |
|-------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `const `[Int](https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html) | [SCOPE_CACHED](https://developer.android.com/reference/kotlin/androidx/recyclerview/selection/ItemKeyProvider#SCOPE_CACHED())` = 1` Provides access to cached data based for items that were recently bound in the view. |
| `const `[Int](https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html) | [SCOPE_MAPPED](https://developer.android.com/reference/kotlin/androidx/recyclerview/selection/ItemKeyProvider#SCOPE_MAPPED())` = 0` Provides access to all data, regardless of whether it is bound to a view or not.     |

|                                                                                                                                                                                          ### Protected constructors                                                                                                                                                                                          |
|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| [ItemKeyProvider](https://developer.android.com/reference/kotlin/androidx/recyclerview/selection/ItemKeyProvider#ItemKeyProvider(int))`(@`[ItemKeyProvider.Scope](https://developer.android.com/reference/kotlin/androidx/recyclerview/selection/ItemKeyProvider.Scope)` scope: `[Int](https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html)`)` Creates a new provider with the given scope. |

|                                  ### Public functions                                  |
|----------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `abstract K?`                                                                          | [getKey](https://developer.android.com/reference/kotlin/androidx/recyclerview/selection/ItemKeyProvider#getKey(int))`(position: `[Int](https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html)`)` |
| `abstract `[Int](https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html) | [getPosition](https://developer.android.com/reference/kotlin/androidx/recyclerview/selection/ItemKeyProvider#getPosition(K))`(key: K)`                                                                          |

## Constants

### SCOPE_CACHED

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

```
const val SCOPE_CACHED = 1: Int
```

Provides access to cached data based for items that were recently bound in the view. Employing this provider will result in a reduced feature-set, as some features like SHIFT+click range selection and band selection are dependent on mapped access.  

### SCOPE_MAPPED

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

```
const val SCOPE_MAPPED = 0: Int
```

Provides access to all data, regardless of whether it is bound to a view or not. Key providers with this access type enjoy support for enhanced features like: SHIFT+click range selection, and band selection.  

## Protected constructors

### ItemKeyProvider

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

```
protected ItemKeyProvider(@ItemKeyProvider.Scope scope: Int)
```

Creates a new provider with the given scope.  

|                                                                                                      Parameters                                                                                                       |
|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------|
| `@`[ItemKeyProvider.Scope](https://developer.android.com/reference/kotlin/androidx/recyclerview/selection/ItemKeyProvider.Scope)` scope: `[Int](https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html) | Scope can't be changed at runtime. |

## Public functions

### getKey

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

```
abstract fun getKey(position: Int): K?
```  

| Returns |
|---------|-----------------------------------------------------------|
| `K?`    | The selection key at the given adapter position, or null. |

### getPosition

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

```
abstract fun getPosition(key: K): Int
```  

|                                   Returns                                   |
|-----------------------------------------------------------------------------|-------------------------------------------------------------------------------|
| [Int](https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html) | the position corresponding to the selection key, or RecyclerView.NO_POSITION. |