java - interfaz - ¿Manera adecuada para manejar la barra de acción botón arriba?
java swing tutorial pdf español (6)
Descubrí que la raíz de mi problema fue un cambio en el manifiesto que hice hace un tiempo: agregué esta línea:
android:launchMode="singleInstance"
así que mi actividad principal no sería relanzada. Cambiándolo a
android:launchMode="singleTask"
resolví mis problemas y pude eliminar todas las cosas onOptionsItemSelected
. Sabía que había algo mal, que Android debería haber podido manejar esto mejor, y tenía razón. Compruebe el manifiesto: P
Uso ActionBarSherlock (aunque no creo que importe).
Tengo una actividad principal y una actividad sobre. Quiero que la actividad Acerca de muestre la flecha hacia atrás por su logotipo, y haga la animación adecuada y demás. No sé cómo hacer esto correctamente.
Actualmente, tengo bajo onOptionsMenuItemSelected para iniciar la actividad principal cuando se presiona el botón Arriba / Inicio, pero es difícil y realmente no funciona bien. Reproduce la animación incorrecta, y maneja mal la multitarea.
¿Cómo puedo configurar esto bien?
Aquí está la parte en mi actividad principal que lanza el Acerca de:
Intent aboutIntent = new Intent(MainActivity.this, About.class);
MainActivity.this.startActivity(aboutIntent);
Aquí está mi actividad Acerca de:
package com.stevenschoen.test;
import android.content.Intent;
import android.os.Bundle;
import com.actionbarsherlock.app.SherlockActivity;
import com.actionbarsherlock.view.MenuItem;
public class About extends SherlockActivity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.about);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowTitleEnabled(false);
}
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
// app icon in action bar clicked; go home
Intent intentHome = new Intent(this, MainActivity.class);
intentHome.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intentHome);
return true;
default:
return super.onOptionsItemSelected(item);
}
}
}
En su onCreate(Bundle savedInstanceState)
, haga
ActionBar actionBar = getSupportActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
Luego, en su onOptionsItemSelected(MenuItem item)
, haga
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
// go to previous screen when app icon in action bar is clicked
Intent intent = new Intent(this, PreviousActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
return true;
}
return super.onOptionsItemSelected(item);
}
Para quienes solo quieren volver a la actividad anterior, esta es la solución más simple:
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
finish(); //this method close current activity and return to previous
return true;
}
return super.onOptionsItemSelected(item);
}
Puede manejar el botón de la barra de acción utilizando código o XML.
Verifica este codigo
si lo desea, agregue esta línea mediante programación en el método onCreate ()
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
Y anular este método en SupportNavigateUp ()
@Override
public boolean onSupportNavigateUp(){
finish();
return true;
}
O no programáticamente puedes agregar meta a un archivo de manifiesto como
<activity android:name="Current Activity"
android:parentActivityName="Activity you want to open">
</activity>
Nota: asegúrese de que la barra de acción no sea nula.
También has probado esto (tomado del sitio web de Android here ):
en el manifiesto, para cada actividad X que necesite ir a la actividad principal, agregue esto al código:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
// Respond to the action bar''s Up/Home button
case android.R.id.home:
NavUtils.navigateUpFromSameTask(this);
return true;
}
return super.onOptionsItemSelected(item);
}
Y esto a su etiqueta xml manifiesto:
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.activities.MainActivity" />
Si necesita seguir teniendo el mismo estado en la actividad principal, use este código en su lugar:
Intent intent = NavUtils.getParentActivityIntent(this);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP);
NavUtils.navigateUpTo(this, intent);
si la API es 16 o superior, puede agregar un atributo de parentActivityName con la ruta a la actividad principal en lugar de los metadatos.
asegúrese de que su Android: minSdkVersion = "11", que se puede ver en el archivo de manifiesto, se haya incluido el ícono Arriba de la APK 11. He hecho una pequeña muestra. Pruebe el siguiente enlace que puede ser de ayuda para importar en su espacio de trabajo.