| page.title=Adding an Up Action |
| page.tags="appbar","actionbar", "up" |
| helpoutsWidget=true |
| trainingnavtop=true |
| |
| @jd:body |
| |
| <div id="tb-wrapper"> |
| <div id="tb"> |
| |
| <h2>This lesson teaches you to</h2> |
| |
| <ol> |
| <li> |
| <a href="#declare-parent">Declare a Parent Activity</a> |
| </li> |
| |
| <li> |
| <a href="#enable-up">Enable the Up Button</a> |
| </li> |
| </ol> |
| |
| <h2>See Also</h2> |
| <ul> |
| <li><a href="{@docRoot}training/implementing-navigation/ancestral.html"> |
| Providing Up Navigation</a></li> |
| </ul> |
| |
| |
| </div> |
| </div> |
| |
| <p> |
| Your app should make it easy for users to find their way back to the app's |
| main screen. One simple way to do this is to provide an <em>Up</em> |
| button on the app bar for all activities except the main one. When the user |
| selects the <em>Up</em> button, the app navigates to the parent |
| activity. |
| </p> |
| |
| <p> |
| This lesson shows you how to add an <em>Up</em> button to an activity by |
| declaring the activity's parent in the manifest, and enabling the app bar's |
| <em>Up</em> button. |
| </p> |
| |
| <h2 id="declare-parent">Declare a Parent Activity</h2> |
| |
| <p> |
| To support the up functionality in an activity, you need to declare the |
| activity's parent. You can do this in the app manifest, by setting an |
| <code>android:parentActivityName</code> attribute. |
| </p> |
| |
| <p> |
| The <code>android:parentActivityName</code> attribute |
| was introduced in Android 4.1 (API level 16). To support devices with older |
| versions of Android, define a <a href= |
| "{@docRoot}guide/topics/manifest/meta-data-element.html"><code><meta-data></code></a> |
| name-value pair, where the name is |
| <code>"android.support.PARENT_ACTIVITY"</code> and the value is the name of |
| the parent activity. |
| </p> |
| |
| <p> |
| For example, suppose your app has a main activity named |
| <code>MainActivity</code> and a single child activity. The following manifest |
| code declares both activities, and specifies the parent/child relationship: |
| </p> |
| <pre> |
| <application ... > |
| ... |
| |
| <!-- The main/home activity (it has no parent activity) --> |
| |
| <activity |
| android:name="com.example.myfirstapp.MainActivity" ...> |
| ... |
| </activity> |
| |
| <!-- A child of the main activity --> |
| <activity |
| android:name="com.example.myfirstapp.MyChildActivity" |
| android:label="@string/title_activity_child" |
| <strong>android:parentActivityName="com.example.myfirstapp.MainActivity"</strong> > |
| |
| <!-- Parent activity meta-data to support 4.0 and lower --> |
| <meta-data |
| <strong>android:name="android.support.PARENT_ACTIVITY" |
| android:value="com.example.myfirstapp.MainActivity" /></strong> |
| </activity> |
| </application> |
| </pre> |
| |
| <h2 id="enable-up">Enable the Up Button</h2> |
| |
| <p> |
| To enable the <em>Up</em> button for an activity that has a parent |
| activity, call the app bar's {@link |
| android.support.v7.app.ActionBar#setDisplayHomeAsUpEnabled |
| setDisplayHomeAsUpEnabled()} method. Typically, you would do this when the |
| activity is created. For example, the following {@link |
| android.app.Activity#onCreate onCreate()} method sets a {@link |
| android.support.v7.widget.Toolbar} as the app bar for |
| <code>MyChildActivity</code>, then enables that app bar's <em>Up</em> button: |
| </p> |
| |
| <pre> |
| @Override |
| protected void onCreate(Bundle savedInstanceState) { |
| super.onCreate(savedInstanceState); |
| setContentView(R.layout.activity_my_child); |
| |
| // my_child_toolbar is defined in the layout file |
| Toolbar myChildToolbar = |
| (Toolbar) findViewById(R.id.my_child_toolbar); |
| setSupportActionBar(myChildToolbar); |
| |
| // Get a support ActionBar corresponding to this toolbar |
| ActionBar ab = getSupportActionBar(); |
| |
| // Enable the Up button |
| <strong>ab.setDisplayHomeAsUpEnabled(true);</strong> |
| } |
| </pre> |
| |
| <p> |
| You do <em>not</em> need to catch the up action in the activity's {@link |
| android.app.Activity#onOptionsItemSelected onOptionsItemSelected()} method. |
| Instead, that method should call its superclass, as shown in <a href= |
| "actions.html#handle-actions">Respond to Actions</a>. The superclass method |
| responds to the <em>Up</em> selection by navigating to the parent |
| activity, as specified in the app manifest. |
| </p> |