Android - Como puedo programar la flecha atras en Android.

 
Vista:
sin imagen de perfil
Val: 14
Ha aumentado 1 puesto en Android (en relación al último mes)
Gráfica de Android

Como puedo programar la flecha atras en Android.

Publicado por SoCu (8 intervenciones) el 29/01/2018 11:19:35
Hola, he empezado a crear una aplicación para uso personal, y no consigo darle la función que necesito a la flecha atrás que aparece en el menú Toolbar, he visto tutoriales y páginas con códigos que he ido probando y no he tenido suerte.

Tengo puesto un código porque cuando estaba en la actividad principal y pulsaba la flecha atrás la aplicación se cierra, ahora con este código no funciona bien porque va atrás pasando de menú en menú hasta llegar al primer menú.

Solo tengo creada una clase Activity, donde he creado un menú que lleva a las demás clases que son Fragment.

Este código que os pongo es el que tengo puesto, que seguro que hay cosas que no están bien, pero no es como ponerlo.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
public class MainActivity extends AppCompatActivity {
 
    private ViewPager viewPager;
    HorizontalScrollMenuView horizontal_menu;
    int currentPosition = 0;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
 
        horizontal_menu = (HorizontalScrollMenuView) findViewById(R.id.horizontal_menu);
        viewPager = (ViewPager) findViewById(R.id.pager);
 
        horizontal_menu.addItem("Menu 1", R.drawable.menu1_icon,true);
        horizontal_menu.addItem("Menu 2", R.drawable.menu2_icon );
        horizontal_menu.addItem("Menu 3", R.drawable.menu3_icon );
        horizontal_menu.addItem("Menu 4", R.drawable.menu4_icon );
        horizontal_menu.addItem("Menu 5", R.drawable.menu5_icon );
 
        horizontal_menu.showItems();
 
        PagerAdapter pagerAdapter = new PagerAdapter(getSupportFragmentManager());
        viewPager.setAdapter(pagerAdapter);
        viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
 
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
            }
 
            // Boton atras
            @Override
            public void onPageSelected(int position) {
                horizontal_menu.setItemSelected(position);
                currentPosition = position;
            }
 
            @Override
            public void onPageScrollStateChanged(int state) {
            }
        });
 
        horizontal_menu.setOnHSMenuClickListener(new HorizontalScrollMenuView.OnHSMenuClickListener() {
            @Override
            public void onHSMClick(MenuItem menuItem, int position) {
                viewPager.setCurrentItem(position);
            }
        });
    }
 
    @Override
    public void onBackPressed() {
        if (currentPosition > 0){
            viewPager.setCurrentItem(currentPosition - 1);
        }
        else {
            AlertDialog.Builder builder = new AlertDialog.Builder(this);
            builder.setIcon(R.drawable.stop_1);
            builder.setMessage("Quieres salir de la aplicación?");
            builder.setTitle("Cerrar Documentos");
            builder.setPositiveButton("Aceptar", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    finish();
                }
            });
            builder.setNegativeButton("Cancelar", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    dialog.cancel();
                }
            });
 
            AlertDialog dialog=builder.create();
            dialog.show();
        }
    }
 
 
    @Override
    public boolean onSupportNavigateUp() {
        onBackPressed();
        return false;
    }
 
    //empieza codigo del menu de opciones que se muestra en el lado izquierdo
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_opciones, menu);
        return true;
    }
 
    @Override
    public boolean onOptionsItemSelected(android.view.MenuItem item) {
 
        switch (item.getItemId()){
            case R.id.m_acerca:
 
                Toast toast = new Toast(getApplicationContext());
                toast.setGravity( Gravity.CENTER,0,0);
 
                TextView tv = new TextView(MainActivity.this);
                tv.setBackgroundColor( Color.RED);
                tv.setTextColor(Color.YELLOW);
                tv.setTextSize(20);
 
                Typeface t = Typeface.create("serif", Typeface.BOLD_ITALIC);
                tv.setTypeface(t);
                tv.setPadding(10,10,10,10);
                tv.setText("\"Documentos Versión 1.0\"");
                toast.setView(tv);
                toast.setDuration(Toast.LENGTH_LONG);
                toast.show();
 
                return true;
 
            case R.id.m_salir:
                onBackPressed();
 
            case android.R.id.home:
                onBackPressed();
                return true;
        }
 
        return super.onOptionsItemSelected(item);
    }
 
    //termina el codigo del menu de opciones
 
    private class PagerAdapter extends FragmentPagerAdapter {
 
        PagerAdapter(FragmentManager fm) {
            super(fm);
        }
 
        @Override
        public Fragment getItem(int position) {
 
            switch (position) {
                case 0:
                    return new Menu_1();
                case 1:
                    return new Menu_2();
                case 2:
                    return new Menu_3();
                case 3:
                    return new Menu_4();
                case 4:
                    return new Menu_5();
 
                default:
                    return new Menu_5();
            }
        }
 
        @Override
        public int getCount() {
            return 6;
        }
 
    }
 
}

No quiero que al pulsar el botón regrese a la actividad principal, si no vuelva atrás sobre lo que estaba viendo.

Como tengo puestas páginas web en la aplicación, intento que el botón atrás tenga la misma función que la del navegador web del pc, que si voy pasando páginas hacia adelante, y si pulso la flecha atrás vuelva sobre lo que estaba viendo antes.

Así que si recurro a vosotros, y os agradecería vuestra ayuda para solucionar este problema.


Gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 92
Bronce
Ha mantenido su posición en Android (en relación al último mes)
Gráfica de Android

Como puedo programar la flecha atras en Android.

Publicado por Carlos Ismael (38 intervenciones) el 01/02/2018 17:45:52
Hola SoCu prueba agregando estos metodos a ese activity.

1
2
3
4
5
6
7
override fun onOptionsItemSelected(item: MenuItem?): Boolean = when (item!!.itemId) {
    R.id.home -> {
        onBackPressed()
        true
    }
    else -> super.onOptionsItemSelected(item)
}

1
2
3
4
override fun onSupportNavigateUp(): Boolean {
    onBackPressed()
    return true
}

Si no mal recuerdo una actividad que extiende de AppCompatActivity tiene que aplicar el metodo onSupportNavigateUp
(Es código kotlin pero el metodo se llama igual.)

Y del toolbar lo tienes bien

1
2
setSupportActionBar(auxToolbar) //Yo tengo este por que lo agrego como un toolbar externo.
supportActionBar.setDisplayHomeAsUpEnabled(true)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 14
Ha aumentado 1 puesto en Android (en relación al último mes)
Gráfica de Android

Como puedo programar la flecha atras en Android.

Publicado por SoCu (8 intervenciones) el 01/02/2018 18:11:02
Que tal Carlos, me da errores y no se muy bien como quitarlos.

Has probado este codigo en lo que te pase.


Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 92
Bronce
Ha mantenido su posición en Android (en relación al último mes)
Gráfica de Android

Como puedo programar la flecha atras en Android.

Publicado por Carlos Ismael (38 intervenciones) el 01/02/2018 23:57:30
Mmm ya te entendi lo que quieres hacer. lo que debes hacer para que la flecha tenga la función como un navegador, es sobreescribir el metodo

1
2
3
4
5
6
7
8
9
10
override fun onOptionsItemSelected(item: MenuItem?): Boolean = when (item!!.itemId) {
    R.id.home -> {
        /*
        AQUI TU LOGICA.
        */
        onBackPressed()
        true
    }
    else -> super.onOptionsItemSelected(item)
}

Lo que se me ocurre es que guardes la URL anterior y cada que presiones la flecha mandes llamar esa URL para que se cargue la pagina web que estaba enteriormente.

Por lo de los errores solo escribe el metodo onOptionsIt.. y te aparecera una referencia en Android Studio solo da Enter y se agregara el metodo automaticamente. Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 14
Ha aumentado 1 puesto en Android (en relación al último mes)
Gráfica de Android

Como puedo programar la flecha atras en Android.

Publicado por SoCu (8 intervenciones) el 02/02/2018 09:10:22
Carlos me sigue mostrando errores, ya que esta puesto el codigo en el primer post te agradeceria si lo colocaras en el para verlo, se llamara igual que el kotlin, pero algo no estoy haciendo que no acabo de ver.

El poner la URL de la pagina, aunque son paginas internas, no solo son paginas, tambien estan los menus y sus correspondientes apartado que lleva ese menu.


Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar