تعامل با کاشی

شما می توانید تجربه کاشی خود را با تعاملی کردن بیشتر افزایش دهید. با افزودن اصلاح‌کننده Clickable به عنصر طرح‌بندی درون کاشی، می‌توانید به ضربه زدن کاربر به آن عنصر طرح‌بندی واکنش نشان دهید.

این صفحه چندین عمل متداول را که کاربران در کاشی های تعاملی انجام می دهند، همراه با راهنمایی در مورد نحوه اجرای این رفتار در کاشی های برنامه شما فهرست می کند.

یک طرح کاشی جدید بارگیری کنید

وقتی کاربر روی یک عنصر تعاملی ضربه می زند، از LoadAction برای تازه کردن طرح کاشی خود استفاده کنید.

در قطعه کد زیر، شناسه قابل کلیک مجموعه در setId() به فراخوانی onTileRequest() ارسال می شود، بنابراین می توانید یک طرح بندی متفاوت را بر اساس این شناسه ارائه دهید:

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

به روز رسانی وضعیت در کاشی

اگر یک عنصر تعاملی در کاشی شما چندین حالت ممکن دارد، از LoadAction برای نشان دادن مقدار جدید عنصر استفاده کنید. در قطعه کد زیر، کاشی مقدار به روز شده یک چک باکس را نشان می دهد:

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

درخواست تجدید محتوای کاشی کنید

برای درخواست به‌روزرسانی برای کل محتوای کاشی، از LoadAction استفاده کنید و وضعیت درخواست کاشی را به‌روزرسانی کنید، همانطور که در قطعه کد زیر نشان داده شده است.

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

برای بارگیری یک فعالیت با استفاده از پیوند عمیق ، یک عنصر قابل کلیک را با یک شی LoadAction مرتبط کنید:

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

سپس، در متد onTileRequest() ، از یک شی TaskStackBuilder به عنوان کمک کننده استفاده کنید:

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

بارگیری یک فعالیت صادر شده

برای بارگیری یک فعالیت صادر شده با نام کلاس و با موارد اضافی قصد، از 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()

در داخل فعالیت راه اندازی شده، می توانید شناسه ای را که برای کاشی استفاده شده است، همانطور که در مثال زیر نشان داده شده است، بازیابی کنید:

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
    }
}
{% کلمه به کلمه %} {% آخر کلمه %} {% کلمه به کلمه %} {% آخر کلمه %}