# ObjectAdapter

Artifact: [androidx.leanback:leanback](https://developer.android.com/jetpack/androidx/releases/leanback) [View Source](https://cs.android.com/search?q=file:androidx/leanback/widget/ObjectAdapter.java+class:androidx.leanback.widget.ObjectAdapter) Added in [1.1.0](https://developer.android.com/jetpack/androidx/releases/leanback#1.1.0)

*** ** * ** ***


```
public abstract class ObjectAdapter
```

<br />

Known direct subclasses [ArrayObjectAdapter](https://developer.android.com/reference/androidx/leanback/widget/ArrayObjectAdapter), [CursorObjectAdapter](https://developer.android.com/reference/androidx/leanback/widget/CursorObjectAdapter), [PagingDataAdapter](https://developer.android.com/reference/androidx/leanback/paging/PagingDataAdapter), [SparseArrayObjectAdapter](https://developer.android.com/reference/androidx/leanback/widget/SparseArrayObjectAdapter)

|---|---|
| `https://developer.android.com/reference/androidx/leanback/widget/ArrayObjectAdapter` | An `https://developer.android.com/reference/androidx/leanback/widget/ObjectAdapter` implemented with an `https://developer.android.com/reference/java/util/ArrayList.html`. |
| `https://developer.android.com/reference/androidx/leanback/widget/CursorObjectAdapter` | An `https://developer.android.com/reference/androidx/leanback/widget/ObjectAdapter` implemented with a `https://developer.android.com/reference/android/database/Cursor.html`. |
| `https://developer.android.com/reference/androidx/leanback/paging/PagingDataAdapter` | An `https://developer.android.com/reference/androidx/leanback/widget/ObjectAdapter` implemented with an `https://developer.android.com/reference/androidx/paging/AsyncPagingDataDiffer`. |
| `https://developer.android.com/reference/androidx/leanback/widget/SparseArrayObjectAdapter` | An `https://developer.android.com/reference/androidx/leanback/widget/ObjectAdapter` implemented with a `https://developer.android.com/reference/android/util/SparseArray.html`. |

*** ** * ** ***

Base class adapter to be used in leanback activities. Provides access to a data model and is decoupled from the presentation of the items via `https://developer.android.com/reference/androidx/leanback/widget/PresenterSelector`.

## Summary

| ### Nested types |
|---|
| `public abstract class https://developer.android.com/reference/androidx/leanback/widget/ObjectAdapter.DataObserver` A DataObserver can be notified when an ObjectAdapter's underlying data changes. |

| ### Constants |
|---|---|
| `static final int` | `https://developer.android.com/reference/androidx/leanback/widget/ObjectAdapter#NO_ID() = -1` Indicates that an id has not been set. |

| ### Public constructors |
|---|
| `https://developer.android.com/reference/androidx/leanback/widget/ObjectAdapter#ObjectAdapter()()` Constructs an adapter. |
| `https://developer.android.com/reference/androidx/leanback/widget/ObjectAdapter#ObjectAdapter(androidx.leanback.widget.Presenter)(@https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/androidx/leanback/widget/Presenter presenter)` Constructs an adapter that uses the given `https://developer.android.com/reference/androidx/leanback/widget/Presenter` for all items. |
| `https://developer.android.com/reference/androidx/leanback/widget/ObjectAdapter#ObjectAdapter(androidx.leanback.widget.PresenterSelector)(@https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/androidx/leanback/widget/PresenterSelector presenterSelector)` Constructs an adapter with the given `https://developer.android.com/reference/androidx/leanback/widget/PresenterSelector`. |

| ### Public methods |
|---|---|
| `abstract @https://jspecify.dev/docs/api/org/jspecify/annotations/Nullable.html https://developer.android.com/reference/java/lang/Object.html` | `https://developer.android.com/reference/androidx/leanback/widget/ObjectAdapter#get(int)(int position)` Returns the item for the given position. |
| `long` | `https://developer.android.com/reference/androidx/leanback/widget/ObjectAdapter#getId(int)(int position)` Returns the id for the given position. |
| `final @https://jspecify.dev/docs/api/org/jspecify/annotations/Nullable.html https://developer.android.com/reference/androidx/leanback/widget/Presenter` | `https://developer.android.com/reference/androidx/leanback/widget/ObjectAdapter#getPresenter(java.lang.Object)(@https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/java/lang/Object.html item)` Returns the `https://developer.android.com/reference/androidx/leanback/widget/Presenter` for the given item from the adapter. |
| `final @https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/androidx/leanback/widget/PresenterSelector` | `https://developer.android.com/reference/androidx/leanback/widget/ObjectAdapter#getPresenterSelector()()` Returns the presenter selector for this ObjectAdapter. |
| `final boolean` | `https://developer.android.com/reference/androidx/leanback/widget/ObjectAdapter#hasStableIds()()` Returns true if the item ids are stable across changes to the underlying data. |
| `boolean` | `https://developer.android.com/reference/androidx/leanback/widget/ObjectAdapter#isImmediateNotifySupported()()` Returns true if the adapter pairs each underlying data change with a call to notify and false otherwise. |
| `final void` | `https://developer.android.com/reference/androidx/leanback/widget/ObjectAdapter#notifyItemRangeChanged(int,int)(int positionStart, int itemCount)` Notifies UI that some items has changed. |
| `final void` | `https://developer.android.com/reference/androidx/leanback/widget/ObjectAdapter#notifyItemRangeChanged(int,int,java.lang.Object)( int positionStart, int itemCount, @https://jspecify.dev/docs/api/org/jspecify/annotations/Nullable.html https://developer.android.com/reference/java/lang/Object.html payload )` Notifies UI that some items has changed. |
| `final void` | `https://developer.android.com/reference/androidx/leanback/widget/ObjectAdapter#registerObserver(androidx.leanback.widget.ObjectAdapter.DataObserver)(@https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/androidx/leanback/widget/ObjectAdapter.DataObserver observer)` Registers a DataObserver for data change notifications. |
| `final void` | `https://developer.android.com/reference/androidx/leanback/widget/ObjectAdapter#setHasStableIds(boolean)(boolean hasStableIds)` Sets whether the item ids are stable across changes to the underlying data. |
| `final void` | `https://developer.android.com/reference/androidx/leanback/widget/ObjectAdapter#setPresenterSelector(androidx.leanback.widget.PresenterSelector)(@https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/androidx/leanback/widget/PresenterSelector presenterSelector)` Sets the presenter selector. |
| `abstract int` | `https://developer.android.com/reference/androidx/leanback/widget/ObjectAdapter#size()()` Returns the number of items in the adapter. |
| `final void` | `https://developer.android.com/reference/androidx/leanback/widget/ObjectAdapter#unregisterAllObservers()()` Unregisters all DataObservers for this ObjectAdapter. |
| `final void` | `https://developer.android.com/reference/androidx/leanback/widget/ObjectAdapter#unregisterObserver(androidx.leanback.widget.ObjectAdapter.DataObserver)(@https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/androidx/leanback/widget/ObjectAdapter.DataObserver observer)` Unregisters a DataObserver for data change notifications. |

| ### Protected methods |
|---|---|
| `final void` | `https://developer.android.com/reference/androidx/leanback/widget/ObjectAdapter#notifyChanged()()` Notifies UI that the underlying data has changed. |
| `final void` | `https://developer.android.com/reference/androidx/leanback/widget/ObjectAdapter#notifyItemMoved(int,int)(int fromPosition, int toPosition)` Notifies UI that item at fromPosition has been moved to toPosition. |
| `final void` | `https://developer.android.com/reference/androidx/leanback/widget/ObjectAdapter#notifyItemRangeInserted(int,int)(int positionStart, int itemCount)` Notifies UI that new items has been inserted. |
| `final void` | `https://developer.android.com/reference/androidx/leanback/widget/ObjectAdapter#notifyItemRangeRemoved(int,int)(int positionStart, int itemCount)` Notifies UI that some items that has been removed. |
| `void` | `https://developer.android.com/reference/androidx/leanback/widget/ObjectAdapter#onHasStableIdsChanged()()` Called when `https://developer.android.com/reference/androidx/leanback/widget/ObjectAdapter#setHasStableIds(boolean)` is called and the status of stable ids has changed. |
| `void` | `https://developer.android.com/reference/androidx/leanback/widget/ObjectAdapter#onPresenterSelectorChanged()()` Called when `https://developer.android.com/reference/androidx/leanback/widget/ObjectAdapter#setPresenterSelector(androidx.leanback.widget.PresenterSelector)` is called and the PresenterSelector differs from the previous one. |

## Constants

### NO_ID

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

```
public static final int NO_ID = -1
```

Indicates that an id has not been set.

## Public constructors

### ObjectAdapter

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

```
public ObjectAdapter()
```

Constructs an adapter.

### ObjectAdapter

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

```
public ObjectAdapter(@NonNull Presenter presenter)
```

Constructs an adapter that uses the given `https://developer.android.com/reference/androidx/leanback/widget/Presenter` for all items.

### ObjectAdapter

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

```
public ObjectAdapter(@NonNull PresenterSelector presenterSelector)
```

Constructs an adapter with the given `https://developer.android.com/reference/androidx/leanback/widget/PresenterSelector`.

## Public methods

### get

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

```
public abstract @Nullable Object get(int position)
```

Returns the item for the given position.

### getId

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

```
public long getId(int position)
```

Returns the id for the given position.

### getPresenter

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

```
public final @Nullable Presenter getPresenter(@NonNull Object item)
```

Returns the `https://developer.android.com/reference/androidx/leanback/widget/Presenter` for the given item from the adapter.

### getPresenterSelector

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

```
public final @NonNull PresenterSelector getPresenterSelector()
```

Returns the presenter selector for this ObjectAdapter.

### hasStableIds

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

```
public final boolean hasStableIds()
```

Returns true if the item ids are stable across changes to the underlying data. When this is true, clients of the ObjectAdapter can use `https://developer.android.com/reference/androidx/leanback/widget/ObjectAdapter#getId(int)` to correlate Objects across changes.

### isImmediateNotifySupported

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

```
public boolean isImmediateNotifySupported()
```

Returns true if the adapter pairs each underlying data change with a call to notify and false otherwise.

### notifyItemRangeChanged

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

```
public final void notifyItemRangeChanged(int positionStart, int itemCount)
```

Notifies UI that some items has changed.

| Parameters |
|---|---|
| `int positionStart` | Starting position of the changed items. |
| `int itemCount` | Total number of items that changed. |

### notifyItemRangeChanged

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

```
public final void notifyItemRangeChanged(
    int positionStart,
    int itemCount,
    @Nullable Object payload
)
```

Notifies UI that some items has changed.

| Parameters |
|---|---|
| `int positionStart` | Starting position of the changed items. |
| `int itemCount` | Total number of items that changed. |
| `@https://jspecify.dev/docs/api/org/jspecify/annotations/Nullable.html https://developer.android.com/reference/java/lang/Object.html payload` | Optional parameter, use null to identify a "full" update. |

### registerObserver

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

```
public final void registerObserver(@NonNull ObjectAdapter.DataObserver observer)
```

Registers a DataObserver for data change notifications.

### setHasStableIds

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

```
public final void setHasStableIds(boolean hasStableIds)
```

Sets whether the item ids are stable across changes to the underlying data.

### setPresenterSelector

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

```
public final void setPresenterSelector(@NonNull PresenterSelector presenterSelector)
```

Sets the presenter selector. May not be null.

### size

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

```
public abstract int size()
```

Returns the number of items in the adapter.

### unregisterAllObservers

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

```
public final void unregisterAllObservers()
```

Unregisters all DataObservers for this ObjectAdapter.

### unregisterObserver

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

```
public final void unregisterObserver(@NonNull ObjectAdapter.DataObserver observer)
```

Unregisters a DataObserver for data change notifications.

## Protected methods

### notifyChanged

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

```
protected final void notifyChanged()
```

Notifies UI that the underlying data has changed.

### notifyItemMoved

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

```
protected final void notifyItemMoved(int fromPosition, int toPosition)
```

Notifies UI that item at fromPosition has been moved to toPosition.

| Parameters |
|---|---|
| `int fromPosition` | Previous position of the item. |
| `int toPosition` | New position of the item. |

### notifyItemRangeInserted

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

```
protected final void notifyItemRangeInserted(int positionStart, int itemCount)
```

Notifies UI that new items has been inserted.

| Parameters |
|---|---|
| `int positionStart` | Position where new items has been inserted. |
| `int itemCount` | Count of the new items has been inserted. |

### notifyItemRangeRemoved

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

```
protected final void notifyItemRangeRemoved(int positionStart, int itemCount)
```

Notifies UI that some items that has been removed.

| Parameters |
|---|---|
| `int positionStart` | Starting position of the removed items. |
| `int itemCount` | Total number of items that has been removed. |

### onHasStableIdsChanged

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

```
protected void onHasStableIdsChanged()
```

Called when `https://developer.android.com/reference/androidx/leanback/widget/ObjectAdapter#setHasStableIds(boolean)` is called and the status of stable ids has changed.

### onPresenterSelectorChanged

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

```
protected void onPresenterSelectorChanged()
```

Called when `https://developer.android.com/reference/androidx/leanback/widget/ObjectAdapter#setPresenterSelector(androidx.leanback.widget.PresenterSelector)` is called and the PresenterSelector differs from the previous one.