Autore Topic: Salvare stato activity  (Letto 739 volte)

Offline arcaik

  • Nuovo arrivato
  • *
  • Post: 10
  • Respect: 0
    • Mostra profilo
Salvare stato activity
« il: 23 Settembre 2014, 12:23:36 CEST »
0
Apro questo topic perchè non mi riesce di salvare lo stato di un imagebutton.
Sto facendo un player per radio con un pulsante play che cambia stato in pause quando viene premuto, il problema è che quando esco fuori dall'activity con il pulsante back mi resetta lo stato del pulsante in play anche se la musica continua a suonare, ho trovato guide su come salvare dei dati per poi essere ripristinati ma per quanto riguarda lo stato dei pulsanti non ho trovato nulla.

Offline BlackJad

  • Utente junior
  • **
  • Post: 59
  • Respect: +6
    • Google+
    • michele-ziparo/4/825/a99/
    • blackjad82
    • Mostra profilo
    • Datawit Systems
  • Dispositivo Android:
    Samsung Galaxy S3
  • Play Store ID:
    Michele Ziparo
  • Sistema operativo:
    Windows 8.1
Re:Salvare stato activity
« Risposta #1 il: 24 Settembre 2014, 00:30:16 CEST »
0
Hai già provato a seguire questo approccio?

Offline arcaik

  • Nuovo arrivato
  • *
  • Post: 10
  • Respect: 0
    • Mostra profilo
Re:Salvare stato activity
« Risposta #2 il: 24 Settembre 2014, 10:40:26 CEST »
0
Si da quello che ho visto provandolo e da quello che ho letto questo metodo funziona per salvare lo stato dell'activity quando si effettua la rotazione dello schermo, ho provato ad utilizzarlo per i miei scopi ma quando premo il pulsante back l'applicazione si resetta

Codice (Java): [Seleziona]
public class MainActivity extends Activity {

        ImageButton playpause;
        EditText editText;
        TextView textView;
        String TAG="TESTO";
                               
               
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        playpause=(ImageButton) findViewById(R.id.imageButton1);
        editText=(EditText) findViewById(R.id.editText1);
        textView=(TextView) findViewById(R.id.textView1);
               
    }
   
   @Override
    protected void onSaveInstanceState(Bundle savedInstanceState){
        savedInstanceState.putString(TAG,(String)textView.getText());
        super.onSaveInstanceState(savedInstanceState);

    }
   
    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
     super.onRestoreInstanceState(savedInstanceState);
     textView.setText(savedInstanceState.getString(TAG));
    }
   
    public void pulsantePremuto(View v){
        playpause.setImageResource(R.drawable.pause);
        textView.setText(editText.getText().toString());
    }

Questo è il codice ho provato e come ho detto per la rotazione dello schermo funziona, ma quando premo il pulsante back e ritorno sull'app mi cancella tutti i dati
« Ultima modifica: 24 Settembre 2014, 10:44:41 CEST da arcaik »

Offline BlackJad

  • Utente junior
  • **
  • Post: 59
  • Respect: +6
    • Google+
    • michele-ziparo/4/825/a99/
    • blackjad82
    • Mostra profilo
    • Datawit Systems
  • Dispositivo Android:
    Samsung Galaxy S3
  • Play Store ID:
    Michele Ziparo
  • Sistema operativo:
    Windows 8.1
Re:Salvare stato activity
« Risposta #3 il: 24 Settembre 2014, 10:44:44 CEST »
0
Usa una classe globale,  pattern Singleton. Memorizza li un eventuale stato di play e poi imposti il pulsante ad ogni caricamento dell'activity

Offline arcaik

  • Nuovo arrivato
  • *
  • Post: 10
  • Respect: 0
    • Mostra profilo
Re:Salvare stato activity
« Risposta #4 il: 24 Settembre 2014, 12:11:09 CEST »
0
Usa una classe globale,  pattern Singleton. Memorizza li un eventuale stato di play e poi imposti il pulsante ad ogni caricamento dell'activity

Scusa se approfitto della tua disponibilità ma potresti spiegarmi in maniera un po più semplice cosa devo fare  ?

Offline BlackJad

  • Utente junior
  • **
  • Post: 59
  • Respect: +6
    • Google+
    • michele-ziparo/4/825/a99/
    • blackjad82
    • Mostra profilo
    • Datawit Systems
  • Dispositivo Android:
    Samsung Galaxy S3
  • Play Store ID:
    Michele Ziparo
  • Sistema operativo:
    Windows 8.1
Re:Salvare stato activity
« Risposta #5 il: 24 Settembre 2014, 14:38:37 CEST »
0
Scusa se approfitto della tua disponibilità ma potresti spiegarmi in maniera un po più semplice cosa devo fare  ?

Figurati, no problema, il pattern singleton lo trovi spiegato molto bene a questo indirizzo.

In pratica tu avresti questa classe globale, in cui imposti qualcosa tipo un booleano che ti indica se sei in play o meno. Dato che la classe singleton avrà una singola istanza, ogni volta che entri nell'activity hai la possibilità di controllare il valore impostato, ed adeguare i tuoi controlli.

Questo ovviamente è solo una delle possibili soluzioni, ma penso sia la più semplice.

Offline arcaik

  • Nuovo arrivato
  • *
  • Post: 10
  • Respect: 0
    • Mostra profilo
Re:Salvare stato activity
« Risposta #6 il: 24 Settembre 2014, 17:55:42 CEST »
0
Figurati, no problema, il pattern singleton lo trovi spiegato molto bene a questo indirizzo.

In pratica tu avresti questa classe globale, in cui imposti qualcosa tipo un booleano che ti indica se sei in play o meno. Dato che la classe singleton avrà una singola istanza, ogni volta che entri nell'activity hai la possibilità di controllare il valore impostato, ed adeguare i tuoi controlli.

Questo ovviamente è solo una delle possibili soluzioni, ma penso sia la più semplice.

Mi hai salvato la vita,sono riuscito a risolvere il problema,posto qui il codice della prova che ho fatto sperando che possa essere di aiuto ad altri

Questa è l' Activity principale


Codice (Java): [Seleziona]
public class MainActivity extends Activity{

        ImageButton playpause;
        Singleton singleton;
        boolean play=true;
                                               
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);        
        setContentView(R.layout.activity_main);
        singleton=(Singleton) getApplicationContext();
    }
     
   
    public void onStart(){
       
        super.onStart();       
        playpause=(ImageButton) findViewById(R.id.imageButton1);
        pulsantePremuto();
       
    }
    public void onResume(){    
        super.onResume();
        play=singleton.getBoolean();
        if(play==true){
                playpause.setImageResource(R.drawable.play);
        }else
                playpause.setImageResource(R.drawable.pause);
    }
   
    public void onBackPressed(){
        super.onBackPressed();
        singleton.setBoolean(play);
    }
   
    public void pulsantePremuto(){     
        playpause.setOnClickListener(new OnClickListener(){
               
                @Override
                        public void onClick(View arg0) {
                        if(play==true)
                        {
                                playpause.setImageResource(R.drawable.pause);
                                play=false;
                        }
                        else
                        {
                                playpause.setImageResource(R.drawable.play);
                                play=true;
                        }
                           
                       
 
                        }
 
                });

            }
   
}

Questa è la classe Singleton
Codice (Java): [Seleziona]
public class Singleton extends Application{

        private boolean statoPulsante=true;
       
        public boolean getBoolean(){
               
                return statoPulsante;
        }
       
        public void setBoolean(boolean stato){
               
                statoPulsante=stato;
        }
}
Naturalmente se ti va di dare un occhiata la codice e darmi qualche consiglio è benaccetto
« Ultima modifica: 24 Settembre 2014, 17:57:15 CEST da arcaik »

Offline BlackJad

  • Utente junior
  • **
  • Post: 59
  • Respect: +6
    • Google+
    • michele-ziparo/4/825/a99/
    • blackjad82
    • Mostra profilo
    • Datawit Systems
  • Dispositivo Android:
    Samsung Galaxy S3
  • Play Store ID:
    Michele Ziparo
  • Sistema operativo:
    Windows 8.1
Re:Salvare stato activity
« Risposta #7 il: 24 Settembre 2014, 23:31:37 CEST »
0
Felice di esserti stato d'aiuto :) però mi stavo chiedendo come mai hai scelto di estendere Application ... a meno di particolari necessità sarebbe meglio una classe completamente indipendente secondo me.

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Salvare stato activity
« Risposta #8 il: 25 Settembre 2014, 08:59:37 CEST »
0
Felice di esserti stato d'aiuto :) però mi stavo chiedendo come mai hai scelto di estendere Application ... a meno di particolari necessità sarebbe meglio una classe completamente indipendente secondo me.

Non so se adesso è preferibile la modalità che citi, però circa 3 anni fa la stessa Dianne Hackborn diceva che estendere Application era una "good practice".
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline BlackJad

  • Utente junior
  • **
  • Post: 59
  • Respect: +6
    • Google+
    • michele-ziparo/4/825/a99/
    • blackjad82
    • Mostra profilo
    • Datawit Systems
  • Dispositivo Android:
    Samsung Galaxy S3
  • Play Store ID:
    Michele Ziparo
  • Sistema operativo:
    Windows 8.1
Re:Salvare stato activity
« Risposta #9 il: 25 Settembre 2014, 09:26:05 CEST »
0
Non so se adesso è preferibile la modalità che citi, però circa 3 anni fa la stessa Dianne Hackborn diceva che estendere Application era una "good practice".

Io di solito estendo Application solo nelle app in cui ho la necessità di accedere al context anche a partire da classi completamente indipendenti, quindi aggiornando il manifest in modo che associ la mia classe al tag application: in questo caso, si, è una best practice avere la propria classe App.

Codice (XML): [Seleziona]
<application android:name="com.you.yourapp.App"
In questo caso, entrambi gli approcci sono adeguati e risolvono il problema, ma estendere Application ha senso secondo me solo se si segue l'approccio di dichiarare la propria classe come applicazione. Per avere una semplice classe singleton, non è necessario.

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Salvare stato activity
« Risposta #10 il: 25 Settembre 2014, 09:37:13 CEST »
0
In questo caso, entrambi gli approcci sono adeguati e risolvono il problema, ma estendere Application ha senso secondo me solo se si segue l'approccio di dichiarare la propria classe come applicazione. Per avere una semplice classe singleton, non è necessario.

Si, ok. Sono d'accordo.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline arcaik

  • Nuovo arrivato
  • *
  • Post: 10
  • Respect: 0
    • Mostra profilo
Re:Salvare stato activity
« Risposta #11 il: 25 Settembre 2014, 10:57:55 CEST »
0
Ho fatto così perchè dalle guide che ho letto mi sembrava il metodo più veloce però come dite voi non è il metodo migliore infatti molti esempi riportano sia il metodo che ho usato sia quello consigliato da  Dianne Hackborn.
Ma è anche vero che questi sono esempi datati 2011, forse nel mentre sono cambiate un po di cose.

Offline BlackJad

  • Utente junior
  • **
  • Post: 59
  • Respect: +6
    • Google+
    • michele-ziparo/4/825/a99/
    • blackjad82
    • Mostra profilo
    • Datawit Systems
  • Dispositivo Android:
    Samsung Galaxy S3
  • Play Store ID:
    Michele Ziparo
  • Sistema operativo:
    Windows 8.1
Re:Salvare stato activity
« Risposta #12 il: 25 Settembre 2014, 11:09:46 CEST »
0
L'importante è che hai capito come risolvere il problema ;)