---
title: "rememberSpatialActivityPanelController"
description: "Creates and remembers a [SpatialActivityPanelController] across recompositions."
type: "composable"
lastmod: "2026-09-24"
---
## API Reference

### rememberSpatialActivityPanelController

> Source set: Android

```kotlin
@Composable
public fun rememberSpatialActivityPanelController(
    initialIntent: Intent
): SpatialActivityPanelController
```

Creates and remembers a [SpatialActivityPanelController](/jetpack-compose/androidx.xr.compose/compose/classes/SpatialActivityPanelController/api) across recompositions.

The provided `initialIntent` is only queued when the controller is initially created. Subsequent
recompositions with a different intent will be ignored. To add new intents dynamically after
creation, use `SpatialActivityPanelController.startActivity`. To replace the panel and its task
stack with a new intent entirely, key the composition on the intent (e.g., using `key(intent)`).

#### Parameters

| | |
| --- | --- |
| initialIntent | The initial `Intent` to queue for execution inside the activity panel. |

#### Return

A remembered instance of [SpatialActivityPanelController](/jetpack-compose/androidx.xr.compose/compose/classes/SpatialActivityPanelController).

## Code Examples

### SpatialActivityPanelSample

```kotlin
@Sampled
@Composable
public fun SpatialActivityPanelSample(intent: Intent) {
    // Because the controller is remembered, passing a different intent parameter
    // on recomposition will not update the controller or launch a new activity.
    val controller = rememberSpatialActivityPanelController(intent)

    Subspace { SpatialActivityPanel(controller = controller) }
}
```

### SpatialActivityPanelRecreateSample

```kotlin
@Sampled
@Composable
public fun SpatialActivityPanelRecreateSample() {
    val context = LocalContext.current
    var selectedEmailId by remember { mutableStateOf<String?>(null) }

    Column {
        Button(onClick = { selectedEmailId = "email_1" }) { Text("Open Email 1") }

        Button(onClick = { selectedEmailId = "email_2" }) { Text("Open Email 2") }

        if (selectedEmailId != null) {
            Subspace {
                // Using Compose key to force recreation of the controller and
                // the panel whenever the selected email changes. This tears down
                // the old activity stack and starts a new one for the new email.
                key(selectedEmailId) {
                    val intent =
                        Intent(context, NewEmailActivity::class.java).apply {
                            putExtra("EMAIL_ID", selectedEmailId)
                        }
                    SpatialActivityPanel(
                        controller = rememberSpatialActivityPanelController(intent)
                    )
                }
            }
        }
    }
}
```
