Я хочу настроить кнопку возврата активности на панели действий, а не кнопку возврата с аппаратной клавишей. Я отверг onBackPressed()
метод. Он работает с моей кнопкой возврата эмулятора, но не с кнопкой возврата на панели действий.
Я хочу, чтобы это произошло с панелью действий. Как я могу это сделать?
Вот мой код:
@Override
public void onBackPressed() {
Toast.makeText(getApplicationContext(),"Back button clicked", Toast.LENGTH_SHORT).show();
return;
}
Я использовал этот тост независимо от того, работает ли нажатие кнопки или нет, но фактические изменения реализации, например, возвращение к предыдущему действию. Но это не работает с кнопкой, присутствующей в верхней части панели действий (помимо заголовка действия).
Пожалуйста, любой может указать мне проблему.
return true;
наreturn super.onOptionsItemSelected(item)
. Затем вы можете заставить что-то происходить, когда пользователь нажимает кнопку «Назад» на панели действий, но при этом сохраняет ту же функциональность, что и кнопка.Если вы хотите, чтобы кнопка возврата ActionBar работала так же, как аппаратная кнопка возврата:
@Override public boolean onOptionsItemSelected(MenuItem item) { if (item.getItemId() == android.R.id.home) { onBackPressed(); return true; } return false; }
источник
android.R.id.home
не стреляетsetHasOptionsMenu(true)
методСледует иметь в виду две вещи: пользователь может либо нажать кнопку «Назад», либо нажать кнопку «Домой» на панели действий.
Итак, если вы хотите перенаправить его в тот же пункт назначения, вы можете это сделать.
@Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: onBackPressed(); return true; } return false; } @Override public void onBackPressed() { super.onBackPressed(); Intent intent = new Intent(CurrentActivity.this, NextActivity.class); startActivity(intent); finish(); }
Это приведет пользователя к намерению нажать либо клавишу, либо кнопку панели действий.
источник
android.R.id.home
не стреляет@Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: finish(); break; } return true; }
источник
Извините, мой ответ был запоздалым, но для всех, кто пришел на эту страницу с тем же вопросом, я попробовал следующее:
@Override public boolean onOptionsItemSelected(MenuItem item) { ... if (item.getItemId() == android.R.id.home) { .... } .... }
но при этом не удалось поймать нажатие кнопки "Назад".
В конце концов я нашел метод, который работал у меня на https://stackoverflow.com/a/37185334/3697478, который должен переопределить «onSupportNavigateUp ()», поскольку я использую панель действий из библиотеки поддержки «AppCompatActivity». (Существует эквивалент «onNavigateUp ()» для новой библиотеки панели действий / панели инструментов.)
@Override public boolean onSupportNavigateUp(){ finish(); return true; }
и я удалил раздел "android: parentActivityName =". MainActivity "из файла манифеста.
источник
Я добился этого, выполнив всего два шага,
Шаг 1. Перейдите в AndroidManifest.xml и добавьте параметр в тег - android: parentActivityName = ". Home.HomeActivity"
пример :
<activity android:name=".home.ActivityDetail" android:parentActivityName=".home.HomeActivity" android:screenOrientation="portrait" />
Шаг 2: в ActivityDetail добавьте действие для предыдущей страницы / действия
пример :
@Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: onBackPressed(); return true; } return super.onOptionsItemSelected(item); }
источник
Если вы хотите вернуться к предыдущему экземпляру Activity , нажав домашнюю кнопку ActionBar, не создавая его заново, вы можете переопределить метод getParentActivityIntent, чтобы использовать метод из заднего стека:
@TargetApi(Build.VERSION_CODES.JELLY_BEAN) @Override public Intent getParentActivityIntent() { return super.getParentActivityIntent().addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); }
РЕДАКТИРОВАТЬ:
Вы также можете добиться того же результата,
установив для параметра launchMode родительского действия значение singleTop.
Итак, установите
android:launchMode="singleTop"
родительскую активность в своем манифесте.Или вы можете использовать флаг FLAG_ACTIVITY_CLEAR_TOP с намерением ВВЕРХ.
ссылка: Обеспечение навигации вверх
источник
(1) Добавьте родительскую активность для вашей дочерней активности (AndroidManifest.xml)
<activity android:name=".ParentActivity" />
(2) переопределить метод onSupportNavigateUp внутри дочернего действия
@Override public boolean onSupportNavigateUp() { onBackPressed(); return false; }
источник
@Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); if (id == android.R.id.home) { onBackPressed(); return true; } //noinspection SimplifiableIfStatement if (id == R.id.signIn) { return true; } return super.onOptionsItemSelected(item); } /////////////////// @Override public void onBackPressed() { super.onBackPressed(); finish(); }
источник
Есть несколько способов настроить кнопку возврата на панели:
1) метод
.setDisplayHomeAsUpEnabled(true);
сделает это, а затем вы можете просто переопределитьandroid.R.id.home
2) добавление
<meta-data android:name="android.support.PARENT_ACTIVITY" android:value="my.package.parrent" />
в Android Manifest, но в этом случае вы не можете переопределитьandroid.R.id.home
в OnOptionsMenuSelected... для тех, кто задается вопросом, почему у них не работает ...
источник