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

تجربة طريقة Compose
‫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") }
                  }
              )
          }
      }
  }