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

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

يمكنك إضافة إجراء إلى 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() methods لإرفاق المستمع بـ 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") }
                  }
              )
          }
      }
  }