Mit Kacheln interagieren

Du kannst deine Ansichten zusätzlich interaktiv gestalten. Durch Hinzufügen von Clickable-Modifikator auf ein Layoutelement in der Kachel anwenden, können Sie wenn Nutzende auf dieses Layoutelement tippen.

Auf dieser Seite sind einige häufige Aktionen aufgeführt, die Nutzer in interaktiven und eine Anleitung zur Implementierung dieser Funktion Kacheln.

Neues Kachellayout laden

Mit LoadAction können Sie das Layout Ihrer Kachel aktualisieren, wenn der Nutzer auf ein Element tippt interaktives Element.

Im folgenden Code-Snippet wird die in setId() festgelegte anklickbare ID übergeben. in den onTileRequest()-Aufruf ein, sodass Sie ein anderes Layout für diese ID:

override fun onTileRequest(requestParams: TileRequest) = Futures.immediateFuture(
    Tile.Builder()
        .setResourcesVersion("1")
        .setTileTimeline(Timeline.fromLayoutElement(
            when(requestParams.currentState.lastClickableId) {
                "foo" -> myFooLayout()
                else -> myOtherLayout()
            }
        )).build()
)

Status in der Kachel aktualisieren

Wenn ein interaktives Element in Ihrer Kachel mehrere mögliche Zustände hat, verwenden Sie einen LoadAction, um den neuen Wert des Elements anzuzeigen. Im folgenden Code-Snippet zeigt der Parameter Kachel zeigt den aktualisierten Wert eines Kontrollkästchens an:

private fun checkboxChip(
    checkboxValue: Boolean,
    deviceParameters: DeviceParametersBuilders.DeviceParameters
): Chip =
    Chip.Builder(
            context,
            Clickable.Builder()
                .setOnClick(LoadAction.Builder()
                    .build()
                ).build(),
            deviceParameters
        ).setIconContent(if (checkboxValue) "check" else "checkoff")
        // Set checkbox labels and colors here.
        .build()

Aktualisierung des Inhalts der Kachel anfordern

Wenn Sie eine Aktualisierung des gesamten Inhalts der Kachel anfordern möchten, verwenden Sie LoadAction und aktualisieren Sie den Anforderungsstatus der Kachel, wie im folgenden Code-Snippet dargestellt.

private fun tappableElement(): LayoutElement =
    Button.Builder(this, Clickable.Builder()
            .setId("foo")
            .setOnClick(LoadAction.Builder()
                .setRequestState(
                    StateBuilders.State.Builder()
                        /* Update state information here. */
                        .build()
                ).build()
            ).build())
        .setTextContent("Tap me!")
        .build()

Wenn Sie eine Aktivität über einen Deeplink laden möchten, verknüpfen Sie ein anklickbares Element mit einem LoadAction-Objekt:

private fun tappableElement(): LayoutElement =
    Text.Builder()
        .setText("Tap me!")
        .setModifiers(Modifiers.Builder()
            .setClickable(Clickable.Builder()
                .setId("foo")
                .setOnClick(LoadAction.Builder().build())
                .build()
            ).build()
        ).build()

Verwenden Sie dann in der Methode onTileRequest() ein TaskStackBuilder-Objekt als Hilfsprogramm:

override fun onTileRequest(requestParams: TileRequest): ListenableFuture<TileBuilders.Tile> {
    val lastClickableId = requestParams.currentState.lastClickableId
    if (lastClickableId == "foo") {
      TaskStackBuilder.create(this)
        .addNextIntentWithParentStack(Intent(
            Intent.ACTION_VIEW,
            "https://www.example.com/$lastClickableId".toUri(),
            context,
            MyWearOsAppActivity::class.java
        ))
        .startActivities()
    }
    // The user clicked somewhere else on the tile instead.
}

Exportierte Aktivität laden

Um eine exportierte Aktivität nach Klassennamen und mit Intent-Extras zu laden, verwenden Sie einen LaunchAction

private fun tappableElement(): LayoutElement =
    Text.Builder(this, "Tap me!")
        .setModifiers(Modifiers.Builder()
            .setClickable(Clickable.Builder()
                .setId("foo")
                .setOnClick(ActionBuilders.launchAction(
                    ComponentName("my.package.name", "MyActivity")
                )).build()
            ).build()
        ).build()

Innerhalb der gestarteten Aktivität können Sie die ID abrufen, die für die Kachel verwendet wurde. Dies wird im folgenden Beispiel gezeigt:

class MyActivity : FragmentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        val clickableId =
            intent.getStringExtra(TileService.EXTRA_CLICKABLE_ID)
        // clickableId will be "foo" when launched from the Tile
    }
}