blob: 58a18a524f39584123285411e653a612af536d0c [file] [log] [blame]
page.title=Adding an Action to a Message
page.tags="Snackbar" "action" "popup"
helpoutsWidget=true
trainingnavtop=true
@jd:body
<div id="tb-wrapper">
<div id="tb">
<!--
<h2>This lesson teaches you to</h2>
<ol>
<li>
<a href="#id">heading</a>
</li>
<li>
<a href="#id">heading</a>
</li>
</ol>
-->
<h2>See Also</h2>
<ul>
<li><a href="{@docRoot}guide/topics/ui/ui-events.html">
Input Events</a></li>
</ul>
</div>
</div>
<p>
You can add an action to a {@link android.support.design.widget.Snackbar},
allowing the user to respond to your message. If you add an action to a
{@link android.support.design.widget.Snackbar}, the
{@link android.support.design.widget.Snackbar} puts a button
next to the message text. The user can trigger your action by pressing the
button. For example, an email app might put an <em>undo</em> button on its
"email archived" message; if the user clicks the <em>undo</em> button, the
app takes the email back out of the archive.
</p>
<img src="{@docRoot}images/training/snackbar/snackbar_undo_action_2x.png"
srcset="{@docRoot}images/training/snackbar/snackbar_undo_action.png 1x,
{@docRoot}images/training/snackbar/snackbar_undo_action_2x.png 2x"
width="400" alt="">
<p class="img-caption">
<strong>Figure 1.</strong> This Snackbar has an <strong>Undo</strong>
button, which restores the item that was just removed.
</p>
<p>
To add an action to a {@link android.support.design.widget.Snackbar} message,
you need to define a listener object that implements the {@link
android.view.View.OnClickListener} interface. The system calls your
listener's {@link android.view.View.OnClickListener#onClick onClick()} method
if the user clicks on the message action. For example, this snippet shows a
listener for an undo action:
</p>
<pre>public class MyUndoListener implements View.OnClickListener{
&amp;Override
public void onClick(View v) {
// Code to undo the user's last action
}
}</pre>
<p>
Use one of the
{@link android.support.design.widget.Snackbar#setAction(int, android.view.View.OnClickListener)
SetAction()} methods to attach the listener to your {@link
android.support.design.widget.Snackbar}. Be sure to attach the listener
before you call {@link android.support.design.widget.Snackbar#show show()},
as shown in this code sample:
</p>
<pre>Snackbar mySnackbar = Snackbar.make(findViewById(R.id.myCoordinatorLayout),
R.string.email_archived, Snackbar.LENGTH_SHORT);
<strong>mySnackbar.setAction(R.string.undo_string, new MyUndoListener());</strong>
mySnackbar.show();</pre>
<p class="note">
<strong>Note:</strong> A {@link android.support.design.widget.Snackbar}
automatically goes away after a short time, so you can't count on the user
seeing the message or having a chance to press the button. For this reason,
you should consider offering an alternate way to perform any {@link
android.support.design.widget.Snackbar} action.
</p>