Autore Topic: NavigationDrawer e Navigation Up  (Letto 656 volte)

Offline Cleon I

  • Nuovo arrivato
  • *
  • Post: 49
  • Sono l'imperatore della galassia
  • Respect: +2
    • Google+
    • Mostra profilo
  • Dispositivo Android:
    LG L70, Nexus 7 2013
  • Sistema operativo:
    LinuxMint Cinnamon 17.1
NavigationDrawer e Navigation Up
« il: 08 Ottobre 2014, 17:11:01 CEST »
0
Buonasera ho una donmanda che per voi sicuramente è semplice

Ho creato un'app con Navigation Drawer  che ovviamente fa uso dei fragment.
A ogni voce del menù, tramite uno switch-case, ho fatto in modo che apra un determinato layout nel fragment principale. Nella seconda voce del menu( 1 per java ) apro un activity con un Button e al suo interno  ho messo il tasto indietro nell'actionbar (vedi: Action Bar | Android Developers ) e il tutto funziona però perdendo il savedInstanceState dell'activity principale.
Quindi grazie a queste righe di codice:

Codice (Java): [Seleziona]
if(savedInstanceState == null)
                {
                        selectItem(0);
                }

mi torna alla prima voce del drawer

Come faccio ad avere lo stesso risultato del tasto indietro, quindi a far si che si salvi lo stato?

Offline ciccio

  • Utente junior
  • **
  • Post: 65
  • Respect: +7
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Francesco Cervone
  • Sistema operativo:
    Mac OS X 10.9
Re:NavigationDrawer e Navigation Up
« Risposta #1 il: 08 Ottobre 2014, 21:38:55 CEST »
0
Premetto che se postassi la classe intera magari potrei essere più preciso.
Suppongo che quel pezzo di codice sia nella onCreate.
Da quanto ne so, quando si torna indietro da un altra activity non viene richiamata onCreate, a meno che sul pulsante "back" dell'actionbar dell'activity che apri non chiami startActivity(...) con l'activity precedente...
Quindi quel pezzo di codice non dovrebbe essere chiamato quando ritorni all'activity precedente.

Offline Cleon I

  • Nuovo arrivato
  • *
  • Post: 49
  • Sono l'imperatore della galassia
  • Respect: +2
    • Google+
    • Mostra profilo
  • Dispositivo Android:
    LG L70, Nexus 7 2013
  • Sistema operativo:
    LinuxMint Cinnamon 17.1
Re:NavigationDrawer e Navigation Up
« Risposta #2 il: 09 Ottobre 2014, 09:33:43 CEST »
0
Premetto che se postassi la classe intera magari potrei essere più preciso.
Suppongo che quel pezzo di codice sia nella onCreate.
Da quanto ne so, quando si torna indietro da un altra activity non viene richiamata onCreate, a meno che sul pulsante "back" dell'actionbar dell'activity che apri non chiami startActivity(...) con l'activity precedente...
Quindi quel pezzo di codice non dovrebbe essere chiamato quando ritorni all'activity precedente.

si il pezzo di codice è nalla onCreate
quindi se quel pezzo di codice non viene richiamato come mai mi azzera lo stato?
il codice completo della classe con pochissime modifiche è quello riportato qui: Creating a Navigation Drawer | Android Developers

Offline ciccio

  • Utente junior
  • **
  • Post: 65
  • Respect: +7
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Francesco Cervone
  • Sistema operativo:
    Mac OS X 10.9
Re:NavigationDrawer e Navigation Up
« Risposta #3 il: 09 Ottobre 2014, 09:42:06 CEST »
0
Nel codice della pagina web che mi hai linkato non c'è traccia di quell'if...
Credo ancora che ho bisogno del codice...
Quando torni dalla seconda activity chiami startActivity(new Intent(this,PrimaActivity.class)), oppure la termini soltanto senza chiamare nulla?

Offline Cleon I

  • Nuovo arrivato
  • *
  • Post: 49
  • Sono l'imperatore della galassia
  • Respect: +2
    • Google+
    • Mostra profilo
  • Dispositivo Android:
    LG L70, Nexus 7 2013
  • Sistema operativo:
    LinuxMint Cinnamon 17.1
Re:NavigationDrawer e Navigation Up
« Risposta #4 il: 09 Ottobre 2014, 10:11:12 CEST »
0
Nel codice della pagina web che mi hai linkato non c'è traccia di quell'if...
Credo ancora che ho bisogno del codice...
Quando torni dalla seconda activity chiami startActivity(new Intent(this,PrimaActivity.class)), oppure la termini soltanto senza chiamare nulla?

nel link che ho passato c'è solo una porzione di codice (che presa e messa così non funziona neanche) il codice completo è nell'esempio (link a destra)
per il ritorno alla seconda activity uso procedura standard linkata nel primo post

scusa non voglio tenere segreto il codice (quando sarà finita l'app penso di rilasciarla open) ma semplicemente sono al lavoro e ho tutto sul pc di casa


ah dimenticavo mi sa che l'onCreate la richiama perchè ieri ho provato a commentare quell'if e al ritorno dalla seconda activity (tramite l'indietro della actionbar) mi mostrava il fragment centrale vuoto (senza mostrare quindi il contenuto del fragment associato allla voce di menu 0)
« Ultima modifica: 09 Ottobre 2014, 10:17:48 CEST da Cleon I »

Offline ciccio

  • Utente junior
  • **
  • Post: 65
  • Respect: +7
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Francesco Cervone
  • Sistema operativo:
    Mac OS X 10.9
Re:NavigationDrawer e Navigation Up
« Risposta #5 il: 09 Ottobre 2014, 10:25:14 CEST »
+1
Ok ora è chiaro.
Dichiarando nel Manifest la riga
Codice (XML): [Seleziona]
android:parentActivityName="com.example.myfirstapp.MainActivity"è come se venisse chiamato implicitamente la startActivity(...) e quindi ricreata la schermata principale (che chiama onCreate).

Il mio consiglio è di eliminare completamente l'attributo "parentActivityName" e ridefinire il metodo onOptionsItemSelected della seconda activity con il seguente codice:
Codice (Java): [Seleziona]
@Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == android.R.id.home) {
            onBackPressed();
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

Offline Cleon I

  • Nuovo arrivato
  • *
  • Post: 49
  • Sono l'imperatore della galassia
  • Respect: +2
    • Google+
    • Mostra profilo
  • Dispositivo Android:
    LG L70, Nexus 7 2013
  • Sistema operativo:
    LinuxMint Cinnamon 17.1
Re:NavigationDrawer e Navigation Up
« Risposta #6 il: 09 Ottobre 2014, 10:29:17 CEST »
0
Ok ora è chiaro.
Dichiarando nel Manifest la riga
Codice (XML): [Seleziona]
android:parentActivityName="com.example.myfirstapp.MainActivity"è come se venisse chiamato implicitamente la startActivity(...) e quindi ricreata la schermata principale (che chiama onCreate).

Il mio consiglio è di eliminare completamente l'attributo "parentActivityName" e ridefinire il metodo onOptionsItemSelected della seconda activity con il seguente codice:
Codice (Java): [Seleziona]
@Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == android.R.id.home) {
            onBackPressed();
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

grazie proverò quanto prima :-)

ho provato modificando la copia che ho sul tablet con AIDE (funziona da dio seconod me) e funziona metto risolto
« Ultima modifica: 09 Ottobre 2014, 10:41:19 CEST da Cleon I »