Pregunta ¿Cómo anular el botón Atrás de la barra de acción en Android?


aquí está mi consulta Quiero personalizar el botón de retroceso de actividad en la barra de acciones, no en el botón de retroceso de la tecla He reemplazado el método onBackPressed (), funciona con mi botón de emulación y no

con el botón Atrás de la barra de acción.

Quiero que suceda con la barra de acción? ¿Cómo puedo hacer esto? Aquí está mi código

@Override
public void onBackPressed()
{

    Toast.makeText(getApplicationContext(),"Back button clicked", Toast.LENGTH_SHORT).show(); 
    return;
}

He usado esta tostada si la tecla presionada funciona o no, pero la implementación real cambia para volver a la actividad anterior. pero esto no funciona con el botón presente en la barra de la parte superior de la acción (además del título de la actividad).

Por favor, cualquiera podría especificarme el problema.


73
2018-01-21 11:34


origen


Respuestas:


Creo que desea anular la operación de clic del botón de inicio. Puede anular esta funcionalidad como esta en su actividad.

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

164
2018-01-21 11:38



Si desea que el botón Atrás de ActionBar se comporte del mismo modo que el botón de retroceso de hardware:

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
            if (item.getItemId() == android.R.id.home) {
                    onBackPressed();
                    return true;
            }
            return false;
    }

32
2018-01-06 22:02



Dos cosas a tener en cuenta que el usuario puede presionar el botón Atrás o presionar el botón de inicio de la barra de acciones.
Entonces, si desea redirigirlo al mismo destino, puede hacerlo.

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

Esto llevará al usuario a la intención presionando cualquiera de las teclas o el botón de la barra de acción.


8
2017-08-13 16:14



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

7
2018-02-07 07:49



Si quieres regresar a la instancia anterior de una actividad al presionar el botón de inicio de ActionBar, sin volver a crear puede anular el método getParentActivityIntent para usar el de la pila de respaldo:

@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
@Override
public Intent getParentActivityIntent() {
      return super.getParentActivityIntent().addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
}

EDITAR:
También puedes lograr el mismo resultado
configurando el launchMode de su actividad de padres a singleTop.
Así que estableceandroid:launchMode="singleTop" para criar actividad en tu manifiesto
O puede usar la bandera FLAG_ACTIVITY_CLEAR_TOP con la intención UP.
referencia: Proporcionando navegación hacia arriba


2
2018-03-15 08:55



Lo logré usando solo dos pasos,

Paso 1: vaya a AndroidManifest.xml y agregue el parámetro en tag - android: parentActivityName = ". Home.HomeActivity"

ejemplo:

 <activity
    android:name=".home.ActivityDetail"
    android:parentActivityName=".home.HomeActivity"
    android:screenOrientation="portrait" />

Paso 2: en ActivityDetail agregue su acción para la página / actividad anterior

ejemplo:

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

2
2017-10-24 06:58



Lo siento, la mía es una respuesta tardía, pero para cualquier otra persona que llegara a esta página con la misma pregunta, había intentado lo anterior:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
  ...
  if (item.getItemId() == android.R.id.home) {
    ....
  }
  ....
}

pero esto falló al presionar el botón "Atrás".

Finalmente encontré un método que funcionó para mí en https://stackoverflow.com/a/37185334/3697478 que es anular el "onSupportNavigateUp ()" ya que estoy usando la barra de acciones de la biblioteca de soporte "AppCompatActivity". (Hay un "onNavigateUp ()" equivalente para la biblioteca de barra de herramientas / barra de acciones más nueva).

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

y eliminé la sección "android: parentActivityName =". MainActivity "del archivo de manifiesto.


2
2018-06-11 10:24



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

0
2017-10-19 12:03



Hay varias formas de configurar el botón Atrás en la barra:

1) método .setDisplayHomeAsUpEnabled(true); lo hará, y luego simplemente puede anular android.R.id.home

2) agregar <meta-data android:name="android.support.PARENT_ACTIVITY" android:value="my.package.parrent" /> en Android Manifiesto, pero en este caso no poder anular android.R.id.home en OnOptionsMenuSelected.

.. para aquellos que se preguntan por qué no funciona para ellos ...


0
2018-02-02 13:18