64

我一直在尝试向操作栏添加后退按钮。

我希望我的视图看起来像这样: 在此处输入图像描述

我想在操作栏的左侧添加后退按钮。

我添加了这段代码

ActionBar actionBar = getActionBar();

actionBar.setDisplayHomeAsUpEnabled(true);

但它不起作用。

我怎样才能解决这个问题?

4

11 回答 11

128

设置后 actionBar.setHomeButtonEnabled(true);

添加以下代码:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:
            // app icon in action bar clicked; goto parent activity.
            this.finish();
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}
于 2012-12-06T10:04:34.223 回答
54

添加

actionBar.setHomeButtonEnabled(true);

然后添加以下内容

@Override
public boolean onOptionsItemSelected(MenuItem menuItem)
{       
    switch (menuItem.getItemId()) {
        case android.R.id.home:
            onBackPressed();
            return true;
        default:
            return super.onOptionsItemSelected(menuItem);
    }
}

正如naXa所建议的那样,我在 上添加了一个检查itemId,以使其在操作栏上有多个按钮的情况下正常工作。

于 2013-07-01T16:10:39.573 回答
27

这个对我有用:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_your_activity);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    // ... other stuff
}

@Override
public boolean onSupportNavigateUp(){
    finish();
    return true;
}

当您使用 SupportActionBar 中的后退按钮时,将调用 onSupportNavigateUp() 方法。

于 2015-01-20T20:25:41.207 回答
24

设置后

 actionBar.setHomeButtonEnabled(true);

您必须在 AndroidManifest.xml 中配置父活动

<activity
    android:name="com.example.MainActivity"
    android:label="@string/app_name"
    android:theme="@style/Theme.AppCompat" />
<activity
    android:name="com.example.SecondActivity"
    android:theme="@style/Theme.AppCompat" >
    <meta-data
        android:name="android.support.PARENT_ACTIVITY"
        android:value="com.example.MainActivity" />
</activity>

在这里查看更多信息http://developer.android.com/training/implementing-navigation/ancestral.html

于 2013-10-07T15:45:13.237 回答
10

有两种方法可以解决这个问题。

选项 1:更新 Android Manifest 如果总是从同一个 Activity 调用设置 Activity,您可以在 Android Manifest 中建立关系。Android 将自动在 ActionBar 中显示“返回”按钮

<activity
    android:name=".SettingsActivity"
    android:label="Setting Activity">
    <meta-data
        android:name="android.support.PARENT_ACTIVITY"
        android:value="com.example.example.MainActivity" />
</activity>

选项 2:更改 ActionBar 的设置 如果您不知道哪个 Activity 会调用 Settings Activity,您可以像这样创建它。首先在扩展 ActionBarActivity 的活动中(确保您的 @imports 与您正在寻找的兼容性级别相匹配)。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_settings_test);
    ActionBar actionBar = getSupportActionBar();
    actionBar.setHomeButtonEnabled(true);
    actionBar.setDisplayHomeAsUpEnabled(true);
}

然后,检测“返回按钮”按下并告诉 Android 关闭当前打开的 Activity。

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:
            // app icon in action bar clicked; goto parent activity.
            this.finish();
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}

应该这样做!

于 2015-01-10T04:28:57.937 回答
7

首先使用这个:

ActionBar bar = getSupportActionBar();
bar.setDisplayHomeAsUpEnabled(true);

然后在onOptionsItemSelected方法中设置按钮点击的操作

 @Override
 public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:
         finish();
        return true;
     default:
        return super.onOptionsItemSelected(item);
  }
 }
于 2015-01-20T14:03:05.557 回答
6

您需要menuItem.getItemId()在方法android.R.id.home中进行检查onOptionsItemSelected

Android Sherlock ActionBar向上按钮的重复

于 2013-02-01T23:11:47.030 回答
6

更简单更好:对于 API >= 16

只需为 Manifest 中的每个活动添加“parentActivityName”。后退按钮将自动将您带到父活动。

<activity
        android:name="com.example.myfirstapp.DisplayMessageActivity"
        android:label="@string/title_activity_display_message"
        android:parentActivityName="com.example.myfirstapp.MainActivity" >
于 2015-12-18T09:45:23.067 回答
6

使用它来显示后退按钮并移至上一个活动,

final ActionBar actionBar = getSupportActionBar();
        assert actionBar != null;
        actionBar.setDisplayHomeAsUpEnabled(true);
        actionBar.setHomeAsUpIndicator(R.drawable.back_dark);


@Override
    public boolean onOptionsItemSelected(final MenuItem item) {

        switch (item.getItemId()) {
            case android.R.id.home:
                onBackPressed();
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }
于 2015-12-22T10:34:44.053 回答
5

如果其他人需要解决方案

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();

    if (id == android.R.id.home) {
        onBackPressed();
    }

    return super.onOptionsItemSelected(item);
}
于 2015-02-24T09:15:23.920 回答
1

在 onCreate() 方法中添加这一行

getSupportActionBar().setDisplayHomeAsUpEnabled(true);

然后覆盖此方法

 @Override
    public boolean onSupportNavigateUp(){
        finish();
        return true;
    }
于 2017-04-17T18:11:21.870 回答