يمكنك إضافة إجراء إلى Snackbar للسماح للمستخدم بالردّ على رسالتك. عند إجراء ذلك، يضع Snackbar زرًا بجانب نص الرسالة، ويمكن للمستخدم تفعيل الإجراء من خلال النقر على الزر. على سبيل المثال، قد يضع تطبيق بريد إلكتروني زر تراجع في رسالة "تمت أرشفة الرسالة الإلكترونية". إذا نقر المستخدم على الزر تراجع ، يعيد التطبيق الرسالة الإلكترونية من الأرشيف.
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();
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") } } ) } } }