Kartları kullanma

Karo deneyimini etkileşimli hale getirerek daha iyi bir deneyim yaşayabilirsiniz. Clickable değiştiricisini öğe içindeki bir düzen öğesine ekleyerek, kullanıcının bu düzen öğesine dokunmasına tepki verebilirsiniz.

Bu sayfada, kullanıcıların etkileşimli kutularda gerçekleştirdiği birkaç yaygın işlem ve bu davranışın uygulamanızın karolarında nasıl uygulanacağına ilişkin yönergeler yer almaktadır.

Yeni karo düzeni yükle

Kullanıcı etkileşimli bir öğeye dokunduğunda karonuzun düzenini yenilemek için LoadAction kullanın.

Aşağıdaki kod snippet'inde setId() öğesinde ayarlanan tıklanabilir kimlik onTileRequest() çağrısıyla birlikte iletilir. Böylece bu kimliğe göre farklı bir düzen oluşturabilirsiniz:

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 bir etkileşimli öğenin birkaç olası durumu varsa öğenin yeni değerini göstermek için bir LoadAction kullanın. Aşağıdaki kod snippet'inde kutu, bir onay kutusunun güncellenmiş değerini gösterir:

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ın ve kartın istek durumunu aşağıdaki kod snippet'inde gösterildiği gibi güncelleyin.

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 etkinlik yüklemek için tıklanabilir öğeyi bir LoadAction nesnesiyle ilişkilendirin:

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 yardımcı olarak bir TaskStackBuilder nesnesi kullanın:

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 etkinlikleri sınıf adına göre ve intent ekstralarıyla yüklemek için LaunchAction kullanın.

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çinde, aşağıdaki örnekte gösterildiği gibi kutu için kullanılan kimliği alabilirsiniz:

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