إضافة إجراء إلى رسالة

تجربة طريقة ComposeAllowed
Jetpack Compose هي مجموعة أدوات واجهة المستخدم التي ننصح بها لنظام التشغيل Android. تعرَّف على كيفية إضافة إشعارات في Compose.

يمكنك إضافة إجراء إلى Snackbar للسماح للمستخدم بالرد على رسالتك. عند القيام بذلك، يضع Snackbar زرًا بجانب نص الرسالة، ويمكن للمستخدم شغّل الإجراء عن طريق النقر على الزر. على سبيل المثال، قد يضع تطبيق البريد الإلكتروني زر تراجع في الرسالة "تمت أرشفة الرسالة الإلكترونية" . إذا نقر المستخدم فوق تراجع، يسترجع التطبيق الرسالة الإلكترونية من الأرشيف.

صورة تعرض شريطًا للوجبات الخفيفة مع زر اتخاذ إجراء للتراجع
الشكل 1. Snackbar يتضمن زر التراجع عن الإجراء استعادة عنصر تمت إزالته.

لإضافة إجراء إلى رسالة Snackbar، حدِّد كائن مستمع التي تنفّذ View.OnClickListener من واجهة pyplot. يستدعي النظام بيانات onClick() إذا نقر المستخدم على إجراء الرسالة. على سبيل المثال، يعرض هذا المقتطف المستمع لإجراء التراجع:

Kotlin

class MyUndoListener : View.OnClickListener {

  fun onClick(v: View) {
    // Code to undo the user's last action.
  }
}

Java

public class MyUndoListener implements View.OnClickListener {

    @Override
    public void onClick(View v) {

        // Code to undo the user's last action.
    }
}

يمكنك استخدام إحدى setAction() لإرفاق المستمع بـ Snackbar. إرفاق أداة استماع قبل الاتصال show(), كما هو موضح في نموذج الرمز هذا:

Kotlin

val mySnackbar = Snackbar.make(findViewById(R.id.myCoordinatorLayout),
                               R.string.email_archived, Snackbar.LENGTH_SHORT)
mySnackbar.setAction(R.string.undo_string, MyUndoListener())
mySnackbar.show()

Java

Snackbar mySnackbar = Snackbar.make(findViewById(R.id.myCoordinatorLayout),
        R.string.email_archived, Snackbar.LENGTH_SHORT);
mySnackbar.setAction(R.string.undo_string, new MyUndoListener());
mySnackbar.show();
إذا كنت تستخدم Jetpack Compose، يمكنك إظهار SnackbarHost, كما هو موضح في المثال التالي:

Kotlin

    override fun onCreate(savedInstanceState: Bundle?) {

      super.onCreate(savedInstanceState)

      setContent {
          DACPlaygroundTheme {
              val snackbarHostState = remember { SnackbarHostState() }
              val scope = rememberCoroutineScope()
              Scaffold(
                  snackbarHost = { SnackbarHost(snackbarHostState) },
                  content = { padding ->
                      Button(
                          modifier = Modifier.padding(padding),
                          onClick = {
                              scope.launch {
                                  snackbarHostState.showSnackbar(
                                      message = "1 item removed",
                                      actionLabel = "UNDO",
                                      duration = SnackbarDuration.Short
                                  ).run {
                                      when (this) {
                                          Dismissed -> Log.d("SNACKBAR", "Dismissed")
                                          ActionPerformed -> Log.d("SNACKBAR", "UNDO CLICKED")
                                      }
                                  }
                              }
                          }
                      ) { Text("Show snackbar") }
                  }
              )
          }
      }
  }