android - studio - Mostrar el botón Atrás en la barra de acciones
regresar a un activity anterior android (16)
Estoy tratando de mostrar un Back button
en la Action bar
para mover la página / actividad anterior o a la página principal (primera apertura). Y no puedo hacerlo
mi código.
ActionBar actionBar = getActionBar();
actionBar.setHomeButtonEnabled(true);
el código está en onCreate
.
Agregue estas líneas a onCreate ()
android.support.v7.app.ActionBar actionBar = getSupportActionBar();
actionBar.setHomeButtonEnabled(true);
actionBar.setDisplayHomeAsUpEnabled(true);
y en onOptionItemSelected
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
//Write your logic here
this.finish();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
Espero que esto te ayudará..!
Creo que onSupportNavigateUp()
es la mejor y más fácil manera de hacerlo, verifique el código a continuación.
si lo quieres programáticamente, agrega esta línea al método onCreate()
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
Nota: asegúrese de que la barra de acciones no sea nula.
Y anule este método
@Override
public boolean onSupportNavigateUp(){
finish();
return true;
}
Eso es
O No programáticamente puede agregar meta a la actividad en el archivo de manifiesto como
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="MainActivity" />
Editar: si no está utilizando la actividad de AppCompat
entonces no use la palabra de support
, puede usar
getActionBar().setDisplayHomeAsUpEnabled(true); // In `OnCreate();`
@Override
public boolean onNavigateUp(){
finish();
return true;
}
Gracias a @atariguy por sus comentarios.
En su método onCreate
, agregue:
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
Al definir en AndroidManifest.xml
la actividad principal (la actividad que será llamada una vez que se presiona el botón Atrás en la barra de acciones):
En su definición de <activity>
en el Manifiesto, agregue la línea:
android:parentActivityName="com.example.activities.MyParentActivity"
La magia ocurre en onOptionsItemSelected
.
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
// app icon in action bar clicked; go home
Intent intent = new Intent(this, HomeActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
return true;
default:
return super.onOptionsItemSelected(item);
}
}
Lo resolví de esta manera
@Override
public boolean onOptionsItemSelected(MenuItem item){
switch (item.getItemId()) {
case android.R.id.home:
onBackPressed();
finish();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
@Override
public void onBackPressed(){
Intent backMainTest = new Intent(this,MainTest.class);
startActivity(backMainTest);
finish();
}
Para lograr esto, hay simplemente dos pasos,
Paso 1: vaya a AndroidManifest.xml
y agregue este parámetro en la etiqueta <activity>
- android:parentActivityName=".home.HomeActivity"
Ejemplo:
<activity
android:name=".home.ActivityDetail"
android:parentActivityName=".home.HomeActivity"
android:screenOrientation="portrait" />
Paso 2: en ActivityDetail
agregue su action
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);
}
Pruebe este código, lo considera solo si necesita el botón Atrás.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//YOUR CODE
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
//YOUR CODE
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
onBackPressed();
return true;
}
Pruebe esto, en su onCreate ()
getActionBar().setHomeButtonEnabled(true);
getActionBar().setDisplayHomeAsUpEnabled(true);
Y para clickevent,
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
// app icon in action bar clicked; goto parent activity.
this.finish();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
Sé que las anteriores son muchas soluciones útiles, pero esta vez leí este artículo (el actual Android Studio 2.1.2 con SDK 23) algún método anterior no funciona.
A continuación, mi solución para la subactividad es MapsActivity
Primero, debe agregar parentActivity en
AndroidManifest.xml
Me gusta esto :
<application ... >
...
<!-- Main activity (which has no parent activity) -->
<activity
android:name="com.example.myapp.MainActivity" ...>
...
</activity>
<!-- A child of the main activity -->
<activity
.....
android:parentActivityName=".MainActivity" >
<!-- Support Parent activity for Android 4.0 and lower -->
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.example.myapp.MainActivity" />
</activity>
</application>
Segundo, asegúrese de que su AppCompatActivity
amplíe AppCompatActivity
, no FragmentActivity.
En tercer lugar, anule el método onOptionsItemSelected()
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
// app icon action bar is clicked; go to parent activity
this.finish();
return true;
case R.id.action_settings:
return true;
default:
return super.onOptionsItemSelected(item);
}
}
Espero que esto ayude!
Sé que llegué un poco tarde, pero pude solucionar este problema siguiendo los docs directamente.
Agregue la etiqueta de metadatos a AndroidManifest.xml
(para que el sistema lo sepa)
<activity
android:name=".Sub"
android:label="Sub-Activity"
android:parentActivityName=".MainChooser"
android:theme="@style/AppTheme.NoActionBar">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".MainChooser" />
</activity>
A continuación, habilite el botón de retroceso (arriba) en su MainActivity
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my_child);
// my_child_toolbar is defined in the layout file
Toolbar myChildToolbar =
(Toolbar) findViewById(R.id.my_child_toolbar);
setSupportActionBar(myChildToolbar);
// Get a support ActionBar corresponding to this toolbar
ActionBar ab = getSupportActionBar();
// Enable the Up button
ab.setDisplayHomeAsUpEnabled(true);
}
¡Y estarás listo!
Fuente: docs
Solución oficial
Agregue esos dos fragmentos de código a su SubActividad
@Override
public void onCreate(Bundle savedInstanceState) {
...
getActionBar().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);
}
agregue metadatos y parentActivity a manifestar para soportar sdk inferior.
<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.SubActivity"
android:label="@string/title_activity_display_message"
android:parentActivityName="com.example.myfirstapp.MainActivity" >
<!-- Parent activity meta-data to support 4.0 and lower -->
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.example.myfirstapp.MainActivity" />
</activity>
</application>
Referencia aquí: http://developer.android.com/training/implementing-navigation/ancestral.html
bueno, este es simple para mostrar el botón Atrás
actionBar.setDisplayHomeAsUpEnabled(true);
y luego puede personalizar el evento posterior en onOptionsItemSelected
case android.R.id.home:
this.finish();
return true;
en el método de escritura onCreate
Toolbar toolbar = findViewById(R.id.tool);
setSupportActionBar(toolbar);
if (getSupportActionBar() != null) {
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
}
}
@Override
public boolean onSupportNavigateUp() {
onBackPressed();
return true;
}
@Override
public void onBackPressed() {
super.onBackPressed();
startActivity(new Intent(ActivityOne.this, ActivityTwo.class));
finish();
}
y este es el archivo xml-
<android.support.v7.widget.Toolbar
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@color/colorPrimary"
android:theme="@style/ThemeOverlay.AppCompat.Dark"
android:id="@+id/tool">
y en styles.xml cambiarlo a
Theme.AppCompat.Light.NoActionBar
esto es todo lo que tenemos que hacer.
mi código de trabajo para volver a la pantalla.
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
Toast.makeText(getApplicationContext(), "Home Clicked",
Toast.LENGTH_LONG).show();
// go to previous activity
onBackPressed();
return true;
}
return super.onOptionsItemSelected(item);
}
public void initToolbar(){
//this set back button
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
//this is set custom image to back button
getSupportActionBar().setHomeAsUpIndicator(R.drawable.back_btn_image);
}
//this method call when you press back button
@Override
public boolean onSupportNavigateUp(){
finish();
return true;
}
ActionBar actionBar=getActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
onBackPressed();
return true;
}
return super.onOptionsItemSelected(item);
}