Kartları kullanma

Karoları etkileşimli hale getirerek deneyiminizi daha da zenginleştirebilirsiniz. Clickable değiştiricisini öğe içindeki bir düzen öğesine dönüştürdüğünüzde kullanıcıya dokunmadan önce

Bu sayfada, kullanıcıların etkileşimli modda gerçekleştirdiği bazı yaygın işlemler ve bu davranışı uygulamanızın tıklayın.

Yeni karo düzeni yükle

Kullanıcı bir simgesine dokunduğunda karonunuzun düzenini yenilemek için LoadAction simgesini kullanın. etkileşimli bir öğedir.

Aşağıdaki kod snippet'inde, setId() içinde ayarlanan tıklanabilir kimlik iletilmiştir. onTileRequest() çağrısıyla birlikte takip edin, böylece temel olarak farklı bir düzen bu kimlikte:

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

Kutu içindeki durumu güncelle

Karonuzdaki etkileşimli bir öğenin birkaç olası durumu varsa bir Öğenin yeni değerini göstermek için LoadAction değerini girin. Aşağıdaki kod snippet'inde, kutucuğunda, onay kutusunun güncellenmiş değeri gösterilir:

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()

Kutu içeriğinin yenilenmesini isteme

Kutunun tüm içeriğini güncelleme isteğinde bulunmak için LoadAction öğesini kullanıp güncelleyin aşağıdaki kod snippet'inde gösterildiği gibi öğenin istek durumuna göre değişir.

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()

Derin bağlantı kullanarak bir etkinliği yüklemek için tıklanabilir öğeyi bir LoadAction nesne:

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

Ardından, onTileRequest() yönteminizde, bir TaskStackBuilder nesnesini yardımcı:

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.
}

Dışa aktarılan bir etkinliği yükleme

Dışa aktarılan bir etkinliği sınıf adına ve intent ekstralarına göre yüklemek için 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()

Başlatılan etkinliğin içinden, kart için kullanılan kimliği alabilirsiniz aşağıdaki örnekte gösterildiği gibi:

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
    }
}
ziyaret edin.