Добавить кнопку Назад в панель действий


Я пытался добавить кнопку Назад в панель действий.

Я хочу, чтобы мой вид, чтобы выглядеть так:

Я хочу, чтобы добавить кнопку "Назад" в левой части панели действий.

Я добавил этот код

ActionBar actionBar = getActionBar();

actionBar.setDisplayHomeAsUpEnabled(true);

но это не работает.

Как я могу это исправить?

11 59

11 ответов:

после установки 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);
    }
}

добавить

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, чтобы он работал правильно, если на панели действий есть несколько кнопок.

Это один работал для меня:

@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;
}

метод onSupportNavigateUp () вызывается при использовании кнопки Назад в панели поддержки.

после установки

 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

есть два пути.

Вариант 1: Обновление Манифеста Android Если действие настройки всегда вызывается из одного и того же действия, вы можете создать связь в Манифесте Android. Android автоматически покажет кнопку "Назад" в панели действий

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

Вариант 2: Измените настройку для панели действий Если вы не знаете, какое действие вызовет действие настроек, вы можете создать его следующим образом. Во-первых, ваша активность, которая расширяет 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, чтобы закрыть текущую открытую активность.

@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);
    }
}

Это должно сделать это!

вам нужно будет проверить menuItem.getItemId() против android.R.id.home на onOptionsItemSelected метод

дубликат Android Шерлок ActionBar кнопка вверх

проще и лучше: Для API >= 16

просто добавьте "parentActivityName" для каждого действия в Манифесте. Кнопка "Назад" автоматически приведет вас к родительской активности.

<activity
        android:name="com.example.myfirstapp.DisplayMessageActivity"
        android:label="@string/title_activity_display_message"
        android:parentActivityName="com.example.myfirstapp.MainActivity" >

используйте это, чтобы показать кнопку назад и перейти к предыдущему действию,

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

во-первых, используйте это:

ActionBar bar = getSupportActionBar ();

бар.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);
  }
 }

если кому-то еще нужно решение

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

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

    return super.onOptionsItemSelected(item);
}

добавьте эту строку в метод onCreate ()

getSupportActionBar().setDisplayHomeAsUpEnabled(true);

затем переопределите этот метод

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