volver studio regresar programar para deshabilitar boton bar atras anterior agregar activity java android android-3.0-honeycomb

java - regresar - programar boton atras android studio



¿Cómo implementar el botón Atrás de Android ActionBar? (8)

Anotaciones de Android:

@OptionsItem(android.R.id.home) void homeSelected() { onBackPressed(); }

Fuente: https://github.com/excilys/androidannotations

Tengo una actividad con una lista. Cuando el usuario hace clic en el elemento, se abre el elemento "visor":

List1.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3) { Intent nextScreen = new Intent(context,ServicesViewActivity.class); String[] Service = (String[])List1.getItemAtPosition(arg2); //Sending data to another Activity nextScreen.putExtra("data", datainfo); startActivityForResult(nextScreen,0); overridePendingTransition(R.anim.right_enter, R.anim.left_exit); } });

Esto funciona bien, pero en la barra de acciones la flecha hacia atrás junto al ícono de la aplicación no se activa. ¿Me estoy perdiendo de algo?


Archivo AndroidManifest:

<activity android:name=".activity.DetailsActivity"> <meta-data android:name="android.support.PARENT_ACTIVITY" android:value="br.com.halyson.materialdesign.activity.HomeActivity" /> </activity>

agregar en DetailsActivity:

protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); getSupportActionBar().setDisplayHomeAsUpEnabled(true); }

es trabajo :]


Asegúrate de que tu botón de inicio de ActionBar esté habilitado en la actividad:

Android, API 5+:

@Override public void onBackPressed() { ... super.onBackPressed(); }

ActionBarSherlock y App-Compat, API 7+:

@Override public void onCreate(Bundle savedInstanceState) { ... getSupportActionBar().setDisplayHomeAsUpEnabled(true); }

Android, API 11+:

@Override public void onCreate(Bundle savedInstanceState) { ... getActionBar().setDisplayHomeAsUpEnabled(true); }

Ejemplo MainActivity que extiende ActionBarActivity :

public class MainActivity extends ActionBarActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Back button getSupportActionBar().setDisplayHomeAsUpEnabled(true); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: // API 5+ solution onBackPressed(); return true; default: return super.onOptionsItemSelected(item); } } }

De esta forma, todas las actividades que desee pueden tener la contrapresión.

Android, API 16+:

http://developer.android.com/training/implementing-navigation/ancestral.html

AndroidManifest.xml :

<application ... > ... <!-- The main/home activity (it has no parent activity) --> <activity android:name="com.example.myfirstapp.MainActivity" ...> ... </activity> <!-- A child of the main activity --> <activity android:name="com.example.myfirstapp.DisplayMessageActivity" android:label="@string/title_activity_display_message" android:parentActivityName="com.example.myfirstapp.MainActivity" > <!-- The meta-data element is needed for versions lower than 4.1 --> <meta-data android:name="android.support.PARENT_ACTIVITY" android:value="com.example.myfirstapp.MainActivity" /> </activity> </application>

Ejemplo MainActivity que extiende ActionBarActivity :

public class MainActivity extends ActionBarActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Back button getSupportActionBar().setDisplayHomeAsUpEnabled(true); } @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); } }



Los siguientes pasos son suficientes para retroceder el botón:

Paso 1: este código debe estar en Manifest.xml

<activity android:name=".activity.ChildActivity" android:parentActivityName=".activity.ParentActivity" android:screenOrientation="portrait"> <meta-data android:name="android.support.PARENT_ACTIVITY" android:value=".activity.ParentActivity" /></activity>

Paso 2: no darás

finish();

en su actividad principal mientras comienza la actividad infantil.

Paso 3: Si necesita regresar a la Actividad principal de la Actividad infantil, entonces simplemente dé este código para la Actividad infantil.

startActivity(new Intent(ParentActivity.this, ChildActivity.class));


Para habilitar el botón Atrás de ActionBar, obviamente necesita una Barra de acción en su Actividad. Esto está establecido por el tema que estás usando. Puede configurar el tema para su actividad en AndroidManfiest.xml . Si está utilizando, por ejemplo, el tema @android:style/Theme.NoTitleBar , no tiene una barra de acciones. En este caso, la llamada a getActionBar() devolverá nulo. Así que asegúrese de tener primero una barra de acciones.

El siguiente paso es configurar el android:parentActivityName a la actividad que desea navegar si presiona el botón Atrás. Esto también debe hacerse en AndroidManfiest.xml .

Ahora puede habilitar el botón Atrás en el método onCreate de su actividad "hijo".

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getActionBar().setDisplayHomeAsUpEnabled(true); }

Ahora deberías implementar la lógica para el botón Atrás. Simplemente anula el método onOptionsItemSelected en su actividad "secundaria" y comprueba la id del botón Atrás que es android.R.id.home .

Ahora puede activar el método NavUtils.navigateUpFromSameTask(this); PERO si no ha especificado el android:parentActivityName en su AndroidManfiest.xml esto bloqueará su aplicación.

A veces esto es lo que desea porque le recuerda que olvidó "algo", pero si desea evitarlo, puede verificar si su actividad tiene un padre que usa el método getParentActivityIntent() . Si esto devuelve null, no ha especificado el padre.

En este caso, puede disparar el método onBackPressed() que básicamente hace lo mismo que si el usuario presiona el botón Atrás en el dispositivo. Una buena implementación que nunca interrumpe tu aplicación sería

@Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: if (getParentActivityIntent() == null) { Log.i(TAG, "You have forgotten to specify the parentActivityName in the AndroidManifest!"); onBackPressed(); } else { NavUtils.navigateUpFromSameTask(this); } return true; default: return super.onOptionsItemSelected(item); } }

Tenga en cuenta que la animación que ve el usuario es diferente entre NavUtils.navigateUpFromSameTask(this); y onBackPressed() .

Depende de usted por qué camino tomar, pero encontré la solución útil, especialmente si utiliza una clase base para todas sus actividades.


Selvin ya publicó la respuesta correcta, aquí solo está la solución en código bonito ;-)

public class ServicesViewActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // etc... getActionBar().setDisplayHomeAsUpEnabled(true); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: NavUtils.navigateUpFromSameTask(this); return true; default: return super.onOptionsItemSelected(item); } } }

La función NavUtils.navigateUpFromSameTask(this) requiere que defina la actividad padre en el archivo AndroidManifest.xml

<activity android:name="com.example.ServicesViewActivity" > <meta-data android:name="android.support.PARENT_ACTIVITY" android:value="com.example.ParentActivity" /> </activity>

http://developer.android.com/design/patterns/navigation.html#up-vs-back


https://.com/a/46903870/4489222

Para lograr esto, hay simplemente 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);} }