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

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

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

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

لإضافة إجراء إلى رسالة Snackbar، حدِّد كائن استماع ينفّذ واجهة View.OnClickListener. يستدعي النظام طريقة 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") }
                  }
              )
          }
      }
  }