"Кнопка" Назад "с помощью панели инструментов 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 или то, что мне нужно, чтобы прослушать кнопку "назад"?
Я хочу вызвать основной метод нажатия и установить значок ящика навигации с помощью значка гамбургера.
Ответы
Ответ 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;
}