Glance, Action
sınıfları aracılığıyla kullanıcı etkileşimini yönetmeyi kolaylaştırır. Bir Bakışta
Action
sınıfları, kullanıcıların gerçekleştirebileceği işlemleri tanımlar. Siz de
gerçekleştirilen işlem. Action
işlemini istediğiniz
bileşenini GlanceModifier.clickable
yöntemiyle değiştirin.
Uygulama widget'ları uzak bir işlemde bulunur, bu nedenle işlemler oluşturma sırasında tanımlanır
yürütülmesi uzak süreçte
gerçekleşiyor. Yerel RemoteViews
ürününde,
bu işlem PendingIntents
aracılığıyla yapılır.
Bu sayfada aşağıdaki işlemler açıklanmaktadır:
ziyaret edin.Etkinlik başlatma
Kullanıcı etkileşimiyle ilgili bir etkinlik başlatmak için
actionStartActivity
işlevini kullanarak Button
veya başka bir composable'a
GlanceModifier.clickable
(..) değiştiricisi.
actionStartActivity
içinde aşağıdakilerden birini sağlayın:
- Hedef etkinlik sınıfı
ComponentName
- Niyet
Bir Bakışta, işlemi sağlanan hedefle bir PendingIntent
diline çevirir ve
parametreleridir. Aşağıdaki örnekte, NavigationActivity
, bir
Kullanıcı düğmeyi tıkladığında:
@Composable fun MyContent() { // .. Button( text = "Go Home", onClick = actionStartActivity<MyActivity>() ) }
Hizmet başlatma
Etkinlik başlatmaya benzer şekilde, kullanıcı etkileşimiyle ilgili olarak
actionStartService
yöntemlerinden birini seçin.
actionStartService
içinde aşağıdakilerden birini sağlayın:
- Hedef etkinlik sınıfı
ComponentName
- Amaç
@Composable fun MyButton() { // .. Button( text = "Sync", onClick = actionStartService<SyncService>( isForegroundService = true // define how the service is launched ) ) }
Yayın etkinliği gönder
Aşağıdakilerden birini kullanarak kullanıcı etkileşimi olduğunda bir yayın etkinliği gönderin:
actionSendBroadcast
yöntemleri:
actionSendBroadcast
içinde aşağıdakilerden birini sağlayın:
- Dize işlemi
ComponentName
- Amaç
BroadcastReceiver
sınıf
@Composable fun MyButton() { // .. Button( text = "Send", onClick = actionSendBroadcast<MyReceiver>() ) }
Özel işlemler gerçekleştirme
Glance, belirli bir hedefi lanse etmek yerine bir lambda eylemi veya
Kullanıcı arayüzünü veya açık durumu güncellemek gibi bir işlem gerçekleştirmek için actionRunCallback
kullanıcı etkileşimi.
Lambda işlemlerini çalıştır
Lambda işlevlerini, kullanıcı arayüzü etkileşimlerine geri çağırma olarak kullanabilirsiniz.
Örneğin, lambda işlevini GlanceModifier.clickable
öğesine geçirin.
değiştirici:
Text( text = "Submit", modifier = GlanceModifier.clickable { submitData() } )
Alternatif olarak, destekleyen composable'larda onClick
parametresine de iletebilirsiniz:
Button( text = "Submit", onClick = { submitData() } )
ActionCallback Çalıştır
Alternatif olarak şunun üzerinde işlem gerçekleştirmek için actionRunCallback
yöntemlerini kullanabilirsiniz:
kullanıcı etkileşimi. Bunu yapmak için,
ActionCallback
:
@Composable private fun MyContent() { // .. Image( provider = ImageProvider(R.drawable.ic_hourglass_animated), modifier = GlanceModifier.clickable( onClick = actionRunCallback<RefreshAction>() ), contentDescription = "Refresh" ) } class RefreshAction : ActionCallback { override suspend fun onAction( context: Context, glanceId: GlanceId, parameters: ActionParameters ) { // TODO implement } }
Kullanıcı tıkladığında, sağlanan suspend onAction
yöntemi
ActionCallback
çağrılır, tanımlanan mantığı yürütülür (ör.
verileri yenilemenizi sağlar.
İşlem gerçekleştirildikten sonra widget'ı güncellemek için yeni bir örnek oluşturun ve
update
(..) çağrısı yapın. Daha fazla bilgi için GlanceAppWidget durumunu yönetme başlıklı makaleyi inceleyin.
bölümüne ekleyin.
class RefreshAction : ActionCallback { override suspend fun onAction( context: Context, glanceId: GlanceId, parameters: ActionParameters ) { // do some work but offset long-term tasks (e.g a Worker) MyAppWidget().update(context, glanceId) } }
İşlemlere parametre sağlama
Bir işlemle ilgili ek bilgi sağlamak için ActionParameters
bağlantısını kullanın.
Yazılmış bir anahtar/değer çifti oluşturma API'sini kullanın. Örneğin, tıklanan
hedef:
private val destinationKey = ActionParameters.Key<String>( NavigationActivity.KEY_DESTINATION ) class MyAppWidget : GlanceAppWidget() { // .. @Composable private fun MyContent() { // .. Button( text = "Home", onClick = actionStartActivity<NavigationActivity>( actionParametersOf(destinationKey to "home") ) ) Button( text = "Work", onClick = actionStartActivity<NavigationActivity>( actionParametersOf(destinationKey to "work") ) ) } override suspend fun provideGlance(context: Context, id: GlanceId) { provideContent { MyContent() } } }
Parametreler etkinliği oluşturarak hedef etkinliğin almasına olanak tanır.
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val destination = intent.extras?.getString(KEY_DESTINATION) ?: return // ... } }
Parametreler, ActionCallback
için de sağlanır. Tanımlanan
Değeri almak için Parameters.Key
:
class RefreshAction : ActionCallback { private val destinationKey = ActionParameters.Key<String>( NavigationActivity.KEY_DESTINATION ) override suspend fun onAction( context: Context, glanceId: GlanceId, parameters: ActionParameters ) { val destination: String = parameters[destinationKey] ?: return // ... } }