Подтвердить что ты не робот

"Кнопка" Назад "с помощью панели инструментов getSupportActionbar и appcompat v7

Я использую новую панель инструментов из библиотеки Appcompat V7, и я создаю приложение с навигационным ящиком и с фрагментами.

В некоторых фрагментах я не хочу показывать значок гамбургера, но стрелка вместо этого... Это прекрасно, я сделал это следующим образом:

mDrawerToggle.setDrawerIndicatorEnabled(false);

mDrawerToggle.syncState();
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);

getSupportActionBar().setHomeAsUpIndicator(R.drawable.abc_ic_ab_back_mtrl_am_alpha);

Мой вопрос в том, что: Как или где мне нужно настроить домашнюю кнопку lisener или то, что мне нужно, чтобы прослушать кнопку "назад"? Я хочу вызвать основной метод нажатия и установить значок ящика навигации с помощью значка гамбургера.

4b9b3361

Ответ 1

Вы можете сделать это следующим образом:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);  
    toolbar = (Toolbar)findViewById(R.id.toolbar);
    if (toolbar != null) {
      setSupportActionBar(toolbar);
      getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    }

    setUpNavigationDrawer();

    getFragmentManager().addOnBackStackChangedListener(backStackListener); // listen to the backstack of the fragment manager
}

Определите функцию onBackSTackChangedListener:

private FragmentManager.OnBackStackChangedListener backStackListener = new FragmentManager.OnBackStackChangedListener() {
   @Override
   public void onBackStackChanged() {
       setNavIcon();
   };
}

Установите значок в соответствии с вашим отступным фрагментом:

protected void setNavIcon() {
    int backStackEntryCount = getFragmentManager().getBackStackEntryCount();
    drawerToggle.setDrawerIndicatorEnabled(backStackEntryCount == 0);
}

Обнаружение при нажатии значка ящика:

public boolean onOptionsItemSelected(MenuItem item) {
    if (drawerToggle.isDrawerIndicatorEnabled() && drawerToggle.onOptionsItemSelected(item)) {
        return true;
    }

    switch (item.getItemId()) {
      case x:
         return true;
      default:
         return false;
    }
}

И обработайте кнопку "вверх":

public boolean onSupportNavigateUp() {
    onBackPressed();
    return true;
}

Это работает для меня. Удачи.

Ответ 2

Добавьте этот метод в onCreate():

getSupportActionBar().setDisplayHomeAsUpEnabled(true);

Затем переопределите onOptionItemSelected(), как показано ниже:

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

Ответ 3

Не уверен, что это работает в случае OP, но во многих случаях это, вероятно, самый простой вариант для реализации кнопки "Назад" с помощью панели инструментов AppCompat.

Пропустите все теги setHomeButtonEnabled, setDisplayHomeAsUpEnabled и onOptionsItemSelected и связанные проблемы.

Вместо этого, при инициализации Панели инструментов просто установите 1) значок навигации и 2) навигация OnClickListener для него:

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);

if (enableBackNavigation) {
    toolbar.setNavigationIcon(R.drawable.ic_back);
    toolbar.setNavigationOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            onBackPressed();
        }
    });
}

Ответ 4

1- Создать макет Toolbar;

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:local="http://schemas.android.com/apk/res-auto"
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/dark_blue"
    android:minHeight="?attr/actionBarSize"
    local:popupTheme="@style/ThemeOverlay.AppCompat.Light"
    local:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" />

2- Включите это в свой макет в том месте, где вы хотите Toolbar быть.

3 Вставьте следующий код в свою деятельность. (extends ActionBarActivity)

private Toolbar mToolbar;

//For Toolbar (Action bar) start
        mToolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(mToolbar);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setDisplayShowHomeEnabled(true);
        mToolbar.setNavigationIcon(R.drawable.ic_back_arrow);
        mToolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                onBackPressed();
            }
        });
        getSupportActionBar().setTitle("Event Details");
        //For Toolbar (Action bar) end

4 измените значок обратного щелчка на все, что вы хотите.

Ответ 5

активировать кнопку "Назад":

getActionBar().setDisplayHomeAsUpEnabled(enable);

и прослушивание кликов в onBackPressed()

Очевидно, что ваша активность должна расширяться ActionBarActivity

Ответ 6

Просто вы можете установить значок навигации и убедиться, что вы устанавливаете setNavigationOnClickListener() после установки setSupportActionBar(toolbar)

toolbar.setNavigationIcon(getResources().getDrawable(R.drawable.ic_arrow_back));
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        onBackPressed();
    }
});

Ответ 7

в манифесте добавьте эти строки под действием, в котором вы хотите работать с обратной стрелкой

android: parentActivityName = "Имя родительской активности"

Ответ 8

Добавить setDisplayHomeAsUpEnabled (true)

    Toolbar toolbar  = findViewById(R.id.toolbar);
    ActionBar actionBar = getSupportActionBar();
    if (actionBar != null) {
        actionBar.setDisplayHomeAsUpEnabled(true);
    }

Ручка назад кнопка

   public boolean onSupportNavigateUp() {
    onBackPressed();
    return true;
}