یک اقدام به پیام اضافه کنید

روش نوشتن را امتحان کنید
Jetpack Compose ابزار رابط کاربری پیشنهادی برای اندروید است. یاد بگیرید که چگونه اعلان‌ها را در Compose اضافه کنید.

شما می‌توانید یک عمل (action) به Snackbar اضافه کنید تا کاربر بتواند به پیام شما پاسخ دهد. وقتی این کار را انجام می‌دهید، Snackbar یک دکمه در کنار متن پیام قرار می‌دهد و کاربر می‌تواند با ضربه زدن روی آن دکمه، عمل شما را فعال کند. برای مثال، یک برنامه ایمیل ممکن است یک دکمه لغو (undo) روی پیام "ایمیل بایگانی شده" (email archived) خود قرار دهد. اگر کاربر دکمه لغو (undo) را بزند، برنامه ایمیل را از بایگانی خارج می‌کند.

تصویری که یک اسنک‌بار را با دکمه‌ی لغو عملیات (UNDO) نشان می‌دهد
شکل ۱. یک Snackbar با دکمه‌ی لغو عملیات که آیتم حذف‌شده را بازیابی می‌کند.

برای افزودن یک اکشن به پیام Snackbar ، یک شیء شنونده تعریف کنید که رابط View.OnClickListener را پیاده‌سازی کند. اگر کاربر اکشن پیام را لمس کند، سیستم متد onClick() شنونده شما را فراخوانی می‌کند. برای مثال، این قطعه کد یک شنونده برای اکشن لغو (undo) را نشان می‌دهد:

کاتلین

class MyUndoListener : View.OnClickListener {

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

جاوا

public class MyUndoListener implements View.OnClickListener {

    @Override
    public void onClick(View v) {

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

از یکی از متدهای setAction() برای اتصال شنونده به Snackbar خود استفاده کنید. شنونده را قبل از فراخوانی show() متصل کنید، همانطور که در این نمونه کد نشان داده شده است:

کاتلین

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

جاوا

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 را همانطور که در مثال زیر نشان داده شده است، نمایش دهید:

کاتلین

    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") }
                  }
              )
          }
      }
  }