Autore Topic: tasto BACK riporta ad una Activity vuota  (Letto 1056 volte)

Offline cadupper

  • Utente junior
  • **
  • Post: 81
  • Respect: 0
    • cadupper
    • Mostra profilo
  • Dispositivo Android:
    HTC Magic Tim (32A)
  • Play Store ID:
    cadupper
  • Sistema operativo:
    Ubuntu 10.04
tasto BACK riporta ad una Activity vuota
« il: 09 Maggio 2011, 20:40:41 CEST »
0
Ho un problemino: ho una classe con una lista di eventi visualizzati su una ListView.
Quando clicco su un item, mi si apre giustamente l'Activity successiva, ma quando premo il tasto back la ListView è vuota, anzi, lo schermo è completamente nero... che succede?    o_O
Riporto il metodo onCreate dell'activity di partenza:
Codice: [Seleziona]
public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
       
        setContentView(R.layout.list_events);
        ListView eventsLv=(ListView)findViewById(R.id.eventsLv); //carichiamo la ListView
 
         eventsLv.setTextFilterEnabled(true);

        eventsLv.setOnItemClickListener(new OnItemClickListener() {
          public void onItemClick(AdapterView<?> parent, View view,
              int position, long id) {
                  Intent myIntent = new Intent(view.getContext(), TabWidget.class);
              startActivityForResult(myIntent, 0);
          }
        });


Sapete dirmi come mai si presenta questo problema? devo forse implementare un altro metodo che viene chiamato quando premo il tasto back (che magari mi rilancia la vecchia Activity?)

Offline Qlimax

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 757
  • Respect: +202
    • Google+
    • _Qlimax
    • Mostra profilo
    • www.egsolutions.ch
  • Dispositivo Android:
    Galaxy Nexus - Nexus One - Wildfire - Magic
  • Play Store ID:
    egsolutions.ch
  • Sistema operativo:
    Ubuntu 12.04, Windows 7
Re:tasto BACK riporta ad una Activity vuota
« Risposta #1 il: 09 Maggio 2011, 20:51:24 CEST »
0
Probabilmente la listview ha perso per strada i sui dati...
Devi postare piu codice per fare in modo che possiamo capire il perchè: cosa fai, cosa *non fai* ecc

Offline cadupper

  • Utente junior
  • **
  • Post: 81
  • Respect: 0
    • cadupper
    • Mostra profilo
  • Dispositivo Android:
    HTC Magic Tim (32A)
  • Play Store ID:
    cadupper
  • Sistema operativo:
    Ubuntu 10.04
Re:tasto BACK riporta ad una Activity vuota
« Risposta #2 il: 09 Maggio 2011, 21:01:17 CEST »
0
Questa è la classe della prima Activity
Codice: [Seleziona]
public class Events extends Activity {
        public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
       
        setContentView(R.layout.list_events);
        ListView eventsLv=(ListView)findViewById(R.id.eventsLv); //carichiamo la ListView
       
        AppDB db=new AppDB(getApplicationContext());
        db.open();  //apriamo il db
       
        if(db.fetchEvents().getCount()==0){  //inserimento dati
           
                db.insertEvent("Grigliata", "Piave");
                db.insertEvent("Serata alcorica", "Villa di Mohammed");
                db.insertEvent("PikNic", "Bosco");
                db.insertEvent("Pranzo", "Da Cicciobenzina");
                db.insertEvent("Uscita sulle Dolomiti ", "Cortina");
        }
       
        Cursor c=db.fetchEvents(); // recupero tutta la lista degli eventi
        startManagingCursor(c);
       
        SimpleCursorAdapter adapter=new SimpleCursorAdapter( //semplice adapter per i cursor
                        this,
                        R.layout.row_event, //il layout di ogni riga/prodotto
                        c,
                        new String[]{AppDB.eveName}, //queste colonne (vado a pescarle nel database)
                        new int[]{R.id.eveName}); //in queste views (vado a pescarle tra le view)
       
        eventsLv.setAdapter(adapter); //la listview ha questo adapter
   
        db.close();
       
       
       
        eventsLv.setTextFilterEnabled(true);

        eventsLv.setOnItemClickListener(new OnItemClickListener() {
          public void onItemClick(AdapterView<?> parent, View view,
              int position, long id) {
                  Intent myIntent = new Intent(view.getContext(), TabWidget.class);
              startActivityForResult(myIntent, 0);
          }
        });

    }   
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
        super.onCreateOptionsMenu(menu);
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.events_menu, menu);
        return true;
        }
       
        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        case R.id.suggested_locations:
        startActivity(new Intent(this, Locations.class));
        return true;
        }
        return false;
        }
       
}

Offline Qlimax

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 757
  • Respect: +202
    • Google+
    • _Qlimax
    • Mostra profilo
    • www.egsolutions.ch
  • Dispositivo Android:
    Galaxy Nexus - Nexus One - Wildfire - Magic
  • Play Store ID:
    egsolutions.ch
  • Sistema operativo:
    Ubuntu 12.04, Windows 7
Re:tasto BACK riporta ad una Activity vuota
« Risposta #3 il: 09 Maggio 2011, 21:23:17 CEST »
0
Devi dichiarare il tuo Cursor fuori da onCreate.

Poi devi implementare il metodo onResume e scriverci:

Codice (Java): [Seleziona]
if(c!=null)
c.requery();
« Ultima modifica: 09 Maggio 2011, 21:30:00 CEST da Qlimax »

Offline cadupper

  • Utente junior
  • **
  • Post: 81
  • Respect: 0
    • cadupper
    • Mostra profilo
  • Dispositivo Android:
    HTC Magic Tim (32A)
  • Play Store ID:
    cadupper
  • Sistema operativo:
    Ubuntu 10.04
Re:tasto BACK riporta ad una Activity vuota
« Risposta #4 il: 09 Maggio 2011, 21:38:12 CEST »
0
Devi dichiarare il tuo Cursor fuori da onCreate.

Poi devi implementare il metodo onResume e scriverci:

Codice (Java): [Seleziona]
if(c!=null)
c.requery();

Ho inserito questo metodo:
Codice: [Seleziona]
public void onResume() {
                if(c!=null)
                        c.requery();
        }

Ma che Cursor devo definire fuori? e come funziona .requery() ? tra l'altro nella documentazione viene detto di non usare tale metodo perchè è deprecato
« Ultima modifica: 09 Maggio 2011, 21:40:08 CEST da cadupper »

Offline Qlimax

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 757
  • Respect: +202
    • Google+
    • _Qlimax
    • Mostra profilo
    • www.egsolutions.ch
  • Dispositivo Android:
    Galaxy Nexus - Nexus One - Wildfire - Magic
  • Play Store ID:
    egsolutions.ch
  • Sistema operativo:
    Ubuntu 12.04, Windows 7
Re:tasto BACK riporta ad una Activity vuota
« Risposta #5 il: 09 Maggio 2011, 21:45:39 CEST »
0
Secondo te quale Cursor devi definire fuori dal onCreate? Dai...
Ok, è deprecato, quindi fai come dice la documentazione: fatti dare un nuovo cursore

Offline cadupper

  • Utente junior
  • **
  • Post: 81
  • Respect: 0
    • cadupper
    • Mostra profilo
  • Dispositivo Android:
    HTC Magic Tim (32A)
  • Play Store ID:
    cadupper
  • Sistema operativo:
    Ubuntu 10.04
Re:tasto BACK riporta ad una Activity vuota
« Risposta #6 il: 09 Maggio 2011, 21:49:57 CEST »
0
Secondo te quale Cursor devi definire fuori dal onCreate? Dai...
Ok, è deprecato, quindi fai come dice la documentazione: fatti dare un nuovo cursore

Sisi, ho capito quale cursor, ma non posso fare
Codice: [Seleziona]
Cursor c = new Cursor() perchè Cursor deve essere implementato in qualche modo no?
E quindi devo praticamente mettere nel metodo unResume tutto il codice che ho messo in onCreate per ridisegnare l'interfaccia?    non è possibile a sto punto richiamare direttamente onCreate? è corretto? coem posso fare?

Offline Qlimax

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 757
  • Respect: +202
    • Google+
    • _Qlimax
    • Mostra profilo
    • www.egsolutions.ch
  • Dispositivo Android:
    Galaxy Nexus - Nexus One - Wildfire - Magic
  • Play Store ID:
    egsolutions.ch
  • Sistema operativo:
    Ubuntu 12.04, Windows 7
Re:tasto BACK riporta ad una Activity vuota
« Risposta #7 il: 09 Maggio 2011, 22:03:16 CEST »
0
Devi definire la variabile c, fuori dal metodo onCreate. Questo  non vuol dire istanziarla ( new Cursor() ).
Nel onResume devi aprire il database, farti dare un nuovo cursore, cambiare cursore developer.android.com/reference/android/widget/CursorAdapter.html#changeCursor(android.database.Cursor) all adapter e chiudere il database. Non devi ridisegnare l'interfaccia.

Ovviamente tutte le variabili, come c db ecc, che devono essere accessibili a piu metodi, devi dichiararle fuori dai metodi. Attualmente quelle sono variabili locali accessibili soltanto all interno di onCreate

Offline cadupper

  • Utente junior
  • **
  • Post: 81
  • Respect: 0
    • cadupper
    • Mostra profilo
  • Dispositivo Android:
    HTC Magic Tim (32A)
  • Play Store ID:
    cadupper
  • Sistema operativo:
    Ubuntu 10.04
Re:tasto BACK riporta ad una Activity vuota
« Risposta #8 il: 09 Maggio 2011, 22:26:45 CEST »
0
@Qlimax grazie della tua disponibilità, sono novello nella programmazione android, e spesso mi blocco per delle cose che poi risultano essere delle cavolate..  :-P
ci sono quasi:)
« Ultima modifica: 09 Maggio 2011, 22:34:25 CEST da cadupper »

Offline cadupper

  • Utente junior
  • **
  • Post: 81
  • Respect: 0
    • cadupper
    • Mostra profilo
  • Dispositivo Android:
    HTC Magic Tim (32A)
  • Play Store ID:
    cadupper
  • Sistema operativo:
    Ubuntu 10.04
Re:tasto BACK riporta ad una Activity vuota
« Risposta #9 il: 09 Maggio 2011, 22:53:15 CEST »
0
Questo è il mio metodo onResume()
Codice: [Seleziona]
public void onResume() {
                if (c == null) {
                        db.open();
                        Cursor cNew = db.fetchEvents();
                        db.close();
                        adapter.changeCursor(cNew);
                        super.onResume();
                }
                else {
                        super.onResume();
                }
        }
Ma il problema persiste... dove sbaglio? definire un ulteriore metodo che popola la ListView e la mostra?

Offline Nicola_D

  • Moderatore
  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:tasto BACK riporta ad una Activity vuota
« Risposta #10 il: 09 Maggio 2011, 23:42:28 CEST »
0
Questo è il mio metodo onResume()
Codice: [Seleziona]
public void onResume() {
                if (c == null) {
                        db.open();
                        Cursor cNew = db.fetchEvents();
                        db.close();
                        adapter.changeCursor(cNew);
                        super.onResume();
                }
                else {
                        super.onResume();
                }
        }
Ma il problema persiste... dove sbaglio? definire un ulteriore metodo che popola la ListView e la mostra?
prova a commentare la db.close!!
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline Qlimax

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 757
  • Respect: +202
    • Google+
    • _Qlimax
    • Mostra profilo
    • www.egsolutions.ch
  • Dispositivo Android:
    Galaxy Nexus - Nexus One - Wildfire - Magic
  • Play Store ID:
    egsolutions.ch
  • Sistema operativo:
    Ubuntu 12.04, Windows 7
Re:tasto BACK riporta ad una Activity vuota
« Risposta #11 il: 09 Maggio 2011, 23:57:31 CEST »
0
prova a commentare la db.close!!
Gia.
Oppure mettilo dopo aver cambiato cursore all'adapter. chiama anche startManagingCursor. notte ;)

Offline cadupper

  • Utente junior
  • **
  • Post: 81
  • Respect: 0
    • cadupper
    • Mostra profilo
  • Dispositivo Android:
    HTC Magic Tim (32A)
  • Play Store ID:
    cadupper
  • Sistema operativo:
    Ubuntu 10.04
Re:tasto BACK riporta ad una Activity vuota
« Risposta #12 il: 10 Maggio 2011, 11:14:44 CEST »
0
Funziona ora! Questo il codice!
Codice: [Seleziona]
public void onResume() {
                db.open();
                Cursor cNew = db.fetchEvents();
                adapter.changeCursor(cNew);
                db.close();
                super.onResume();
        }

Se è concettualmente giusto (devo mettere qualche if...?) segnerei il topic come "risolto"!
Ma una domanda... una volta che ho passato il nuovo cursor, come fa a sapere che deve riassociarlo al laiout e visualizzarlo a schermo? tutto quel codice è dentro a onCreate e io non lo richiamo mai in onResume...!

Offline Nicola_D

  • Moderatore
  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:tasto BACK riporta ad una Activity vuota
« Risposta #13 il: 10 Maggio 2011, 13:30:20 CEST »
0
Funziona ora! Questo il codice!
Codice: [Seleziona]
public void onResume() {
                db.open();
                Cursor cNew = db.fetchEvents();
                adapter.changeCursor(cNew);
                db.close();
                super.onResume();
        }

Se è concettualmente giusto (devo mettere qualche if...?) segnerei il topic come "risolto"!
Ma una domanda... una volta che ho passato il nuovo cursor, come fa a sapere che deve riassociarlo al laiout e visualizzarlo a schermo? tutto quel codice è dentro a onCreate e io non lo richiamo mai in onResume...!
rimangono le impostazioni di prima per il cursor!
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline cadupper

  • Utente junior
  • **
  • Post: 81
  • Respect: 0
    • cadupper
    • Mostra profilo
  • Dispositivo Android:
    HTC Magic Tim (32A)
  • Play Store ID:
    cadupper
  • Sistema operativo:
    Ubuntu 10.04
Re:tasto BACK riporta ad una Activity vuota
« Risposta #14 il: 10 Maggio 2011, 14:26:04 CEST »
0
Grazie a tutti! O:-)