Navegación de nuevo a la actividad de los padres en ActionBar sin manipulación

Tengo dos actividades que deseo que esta navegación suceda, ellos son VendorsActivity y QuestionsActivity. El siguiente aspecto de mi AndroidManifest.xml:

(No estoy usando el nombre completo de mis actividades como com.hello.world.MyActivity como se define el atributo del package en el nodo de manifest .)

 <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="19" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".VendorsActivity" android:label="@string/vendors_activity_title" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".TestsActivity" android:label="@string/tests_activity_title" android:parentActivityName=".VendorsActivity" > <meta-data android:name="android.support.PARENT_ACTIVITY" android:value=".VendorsActivity" /> </activity> <activity android:name=".QuestionsActivity" android:label="@string/questions_activity_title" > </activity> </application> 

Y en TestsActivity , estoy llamando a getActionBar().setDisplayHomeAsUpEnabled(true); Método dentro del método onCreate .

El problema es que no funcionará si no implemento el siguiente método en la clase .TestsActivity :

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

Pero la Guía para programadores de Android dice que no tengo que manejar el evento del botón Subir como se mencionó en la parte inferior de la página de resultados: https://developer.android.com/training/basics/actionbar/adding-buttons.html

Debido a que el sistema ahora conoce MainActivity es la actividad principal de DisplayMessageActivity, cuando el usuario presiona el botón Arriba, el sistema navega a la actividad padre según corresponda, no es necesario manejar el evento del botón Arriba.

Editar y Responder:

Como dice la Guía para desarrolladores de Android:

A partir de Android 4.1 (API nivel 16), puede declarar el padre lógico de cada actividad especificando el atributo android: parentActivityName en el elemento.

Si su aplicación es compatible con Android 4.0 o inferior, incluya la Biblioteca de asistencia con su aplicación y agregue un elemento dentro de la aplicación. A continuación, especifique la actividad principal como el valor de android.support.PARENT_ACTIVITY, que coincida con el atributo android: parentActivityName.

Así que creo que mi problema fue por dos razones:

  1. Ejecutar la aplicación en un emulador adecuado. Estaba apuntando a una versión más alta, pero el emulador se ejecutaba en API 14 (Android 4.0) por lo que no sabía cómo manejar el atributo android:parentActivityName .

  2. Orientación del nivel de API correcto en las propiedades de destino del proyecto como se muestra a continuación:

Introduzca aquí la descripción de la imagen

Android: parentActivityName sólo se admite después del nivel API.

Una alternativa es usar soporte-biblioteca: v7 combinado con NavUtils .

Hay un gran material de capacitación sobre este tema (incluya el problema de compatibilidad). Por favor, consulte – http://developer.android.com/training/implementing-navigation/ancestral.html

Dicho esto, estoy publicando mi código de abajo porque está funcionando: –

MainActivity.Java

 package com.example.activitydatasend; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.Menu; import android.view.View; import android.widget.Button; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button click = (Button) findViewById(R.id.click); click.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub Intent intent = new Intent(MainActivity.this,Second.class); intent.putExtra("first", "first"); intent.putExtra("second", "second"); startActivity(intent); } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } } 

SecondActivity.java

 package com.example.activitydatasend; import android.os.Bundle; import android.app.Activity; import android.view.Menu; public class Second extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.second); Bundle bundle = getIntent().getExtras(); String a = bundle.getString("first"); String b = bundle.getString("second"); System.out.println(a+b); getActionBar().setDisplayHomeAsUpEnabled(true); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } } 

AndroidManifext.xml

 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.activitydatasend" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="11" android:targetSdkVersion="18" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.example.activitydatasend.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name="com.example.activitydatasend.Second" android:label="@string/app_name" android:parentActivityName="com.example.activitydatasend.MainActivity" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity> </application> </manifest> 

Activity_main.xml

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/click" android:text="Click" /> </RelativeLayout> 

Segundo.xml

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Second Text" android:textAppearance="?android:attr/textAppearanceLarge" /> </RelativeLayout> 

Si recibe un error similar al

 E/NavUtils﹕ getParentActivityIntent: bad parentActivityName 

o

 does not have a parent activity name specified. (Did you forget to add the android.support.PARENT_ACTIVITY <meta-data> element in your manifest?) 

Es probable que necesite cambiar android: valor a la ruta completa. Así que en lugar de

  <meta-data android:name="android.support.PARENT_ACTIVITY" android:value=".MainActivity" /> 

hacer

  <meta-data android:name="android.support.PARENT_ACTIVITY" android:value="com.package.SecondActivity" /> 

Puede agregar metadatos en el manifiesto para apoyar el sistema operativo pre JellyBean.

 <meta-data android:name="android.support.PARENT_ACTIVITY" android:value=".VendorsActivity" /> 

¿Qué versión de API está utilizando? En mi experiencia, para las versiones anteriores es necesario manejar el evento del botón up, mientras que en las versiones posteriores se hace para ti.

No he mirado en qué versión exacta cambia esto, pero sé que la API 13 no la maneja para usted, mientras que la API 16 lo hace .

  • Menú emergente en el clic de un botón en la barra de acción
  • Cómo ocultar la barra de acción para el fragmento?
  • Poner el interruptor dentro de la barra de acción en Android
  • Configurar OnClickListener en el icono de inicio de la barra de acción hace que el icono pierda el estado de la prensa
  • Android Studio "no puede resolove el símbolo 'Tema'"
  • Submenú ActionBar ActionProvider de Android
  • Cambiar la posición de Android Action Bar
  • App: showAsAction vs android: showAsAction
  • Actividad de Android sin ActionBar
  • Android: La barra de acción predeterminada se está poblando mientras se carga la aplicación
  • Ocultar sólo la barra de acciones en las pestañas de la barra de acción de desplazamiento no
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.