Как переопределить кнопку панели действий в андроиде?
вот мой запрос
Я хочу настроить кнопку "Назад назад" в панели действий, не нажав кнопку "Назад"?
Я переопределяю метод onBackPressed(), который работает с моей кнопкой возврата эмулятора, а не
с кнопкой возврата панели действий.
Я хочу, чтобы это произошло с панелью действий? Как я могу это сделать?
Вот мой код
@Override
public void onBackPressed()
{
Toast.makeText(getApplicationContext(),"Back button clicked", Toast.LENGTH_SHORT).show();
return;
}
Я использовал этот тост, если работает нажатие, или нет, но фактическое изменение реализации похоже на возврат к предыдущему действию. но это не работает с кнопкой, присутствующей на панели "Вверху действия" (кроме названия операции).
Пожалуйста, любой может указать мне проблему.
Ответы
Ответ 1
Я думаю, вы хотите переопределить операцию нажатия кнопки home. Вы можете переопределить эту функциональность, как это в своей деятельности.
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
Toast.makeText(getApplicationContext(),"Back button clicked", Toast.LENGTH_SHORT).show();
break;
}
return true;
}
Ответ 2
Если вы хотите, чтобы кнопка возврата ActionBar вела себя так же, как кнопка "Назад":
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == android.R.id.home) {
onBackPressed();
return true;
}
return false;
}
Ответ 3
Две вещи, чтобы иметь в виду, что пользователь может нажать кнопку "Назад" или нажать кнопку дома на панели действий.
Итак, если вы хотите перенаправить его в тот же пункт назначения, вы можете это сделать.
@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();
}
Это приведет к тому, что пользователь намеревается нажать любую клавишу или кнопку панели действий.
Ответ 4
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
finish();
break;
}
return true;
}
Ответ 5
Если вы хотите вернуться к предыдущему экземпляру Activity, нажав кнопку "Главная страница ActionBar", без повторного создания, вы можете переопределить метод getParentActivityIntent, чтобы использовать тот из задний стек:
@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
@Override
public Intent getParentActivityIntent() {
return super.getParentActivityIntent().addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
}
EDIT:
Также вы можете добиться того же результата, используя
настройка launchMode вашей родительской активности на singleTop.
Поэтому установите android:launchMode="singleTop"
на родительскую активность в вашем манифесте.
Или вы можете использовать флаг FLAG_ACTIVITY_CLEAR_TOP с намерением UP.
ссылка: Предоставление навигации
Ответ 6
@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();
}
Ответ 7
Я достиг этого, просто используя два шага,
Шаг 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);
}