टाइल के साथ इंटरैक्ट करें

इसे इंटरैक्टिव बनाकर, टाइल देखने के अनुभव को और बेहतर बनाया जा सकता है. जोड़ने का टाइल में किसी लेआउट एलिमेंट के लिए, 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
    }
}