Autore Topic: [RISOLTO] Problemi legati alla rotazione  (Letto 1714 volte)

Offline checo79

  • Nuovo arrivato
  • *
  • Post: 21
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    magic
  • Sistema operativo:
    supereclair 8.2
[RISOLTO] Problemi legati alla rotazione
« il: 19 Marzo 2010, 16:16:59 CET »
0
quando ruoto il dispositivo, a occhio il sw riparte dalla onCreate vero?
come salvo il contesto precedente in modo da riaverlo a seguito della rotazione?
« Ultima modifica: 24 Marzo 2010, 11:59:05 CET da Qlimax »

Offline pivot

  • Nuovo arrivato
  • *
  • Post: 49
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    HTC Desire
  • Sistema operativo:
    Windows
Re:Problemi legati alla rotazione
« Risposta #1 il: 19 Marzo 2010, 19:27:48 CET »
0
Io direi, in base alle mie letture, tramite onSaveInstanceState(Bundle savedInstanceState)

oppure puoi impostare nel manifest di essere avvisato in caso di certi eventi (tipo orientation changed)  e poi gestire l'evento tramite:
onConfigurationChanged(Configuration newConfig)

o più semplicemente onPause dovrebbe bastare.

http://developer.android.com/reference/android/app/Activity.html#ConfigurationChanges
« Ultima modifica: 19 Marzo 2010, 19:36:29 CET da pivot »

Offline checo79

  • Nuovo arrivato
  • *
  • Post: 21
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    magic
  • Sistema operativo:
    supereclair 8.2
Re:Problemi legati alla rotazione
« Risposta #2 il: 19 Marzo 2010, 20:39:15 CET »
0
grazie domani ci smanetto

Offline noodles

  • Utente junior
  • **
  • Post: 130
  • Respect: +8
    • Mostra profilo
  • Dispositivo Android:
    Google Nexus One
  • Sistema operativo:
    Mac OS X Snow Leopard
Re:Problemi legati alla rotazione
« Risposta #3 il: 20 Marzo 2010, 04:10:04 CET »
0
se hai da salvare oggetti complessi, utilizza onReteanNonConfigurationInstance(), salva un riferimento ad un Object, che puoi riottenere con la getLastNonConfigurationInstance() nella onCreate().

Se ruoti il display, l'actiivity viene distrutta e ricreata. Perdi tutti i riferimenti agli oggetti che hai istanziato.

Offline checo79

  • Nuovo arrivato
  • *
  • Post: 21
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    magic
  • Sistema operativo:
    supereclair 8.2
Re:Problemi legati alla rotazione
« Risposta #4 il: 20 Marzo 2010, 09:09:42 CET »
0
se hai da salvare oggetti complessi, utilizza onReteanNonConfigurationInstance(), salva un riferimento ad un Object, che puoi riottenere con la getLastNonConfigurationInstance() nella onCreate().

Se ruoti il display, l'actiivity viene distrutta e ricreata. Perdi tutti i riferimenti agli oggetti che hai istanziato.

non ho capito, se uso onRetean.....() salva un riferimento ma poi non dici sotto che vengono tutti distrutti?
Codice (Java): [Seleziona]
public class viewpics extends Activity{
        Random generatore = new Random();
    ImageView imgView;
    public Drawable image;
    public int numero;
               
            OnClickListener getImageBtnOnClick = new OnClickListener() {            
                    public void onClick(View view) {
                            numero= generatore.nextInt(5000);
                            image = ImageOperations(getApplicationContext(),"http:","image.jpg");                
                            imgView.setImageDrawable(image);                                      
                    }
            };
           
            public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);    
                    setContentView(R.layout.main);
                    imgView=(ImageView)findViewById(R.id.image1);
                    imgView.setOnClickListener(getImageBtnOnClick);
                    numero= generatore.nextInt(5000);
                    image = ImageOperations(getApplicationContext(),"h","image.jpg");                
                    imgView.setImageDrawable(image);
                   
                 
                   
            }
che semplicemente carica una immagine in una imgview

Offline noodles

  • Utente junior
  • **
  • Post: 130
  • Respect: +8
    • Mostra profilo
  • Dispositivo Android:
    Google Nexus One
  • Sistema operativo:
    Mac OS X Snow Leopard
Re:Problemi legati alla rotazione
« Risposta #5 il: 20 Marzo 2010, 11:31:14 CET »
0
si hai ragione mi sono espresso male...

allora, ruotando il display l'activity viene distrutta passando per l'intero ciclio di vita fino alla onDestroy() e ricreata a partire dalla onCreate().  In questo modo perdi tutti i riferimenti agli oggetti istanziati nella tua activity.

Utilizzando la onReteinNonCofingInstance() riesci ad eludere questo comportamento salvandoti un riferimento di un Object ( un vettore se sono più di uno) e a riprenderlo nella onCreate() per ripristinare lo stato con la getRLastNonConfig...

spero di esserti stato chiaro.

Anche se dal tuo codice, mi pare di capire che non hai bisogno di salvarti lo stato, se non forse solo l'intero numero, che a questo punto salvi come ti è stato semplicemente usando il Bundle.
« Ultima modifica: 20 Marzo 2010, 11:37:45 CET da noodles »

Offline checo79

  • Nuovo arrivato
  • *
  • Post: 21
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    magic
  • Sistema operativo:
    supereclair 8.2
Re:Problemi legati alla rotazione
« Risposta #6 il: 20 Marzo 2010, 11:43:28 CET »
0
io dovrei salvare l'immagine il drawable, in modo che se ruoto mi si ripresenti la stessa, senza riscaricarla.
al limite va bene anche il numero.

Offline noodles

  • Utente junior
  • **
  • Post: 130
  • Respect: +8
    • Mostra profilo
  • Dispositivo Android:
    Google Nexus One
  • Sistema operativo:
    Mac OS X Snow Leopard
Re:Problemi legati alla rotazione
« Risposta #7 il: 20 Marzo 2010, 11:45:44 CET »
0
io dovrei salvare l'immagine il drawable, in modo che se ruoto mi si ripresenti la stessa, senza riscaricarla.
al limite va bene anche il numero.

allora prova ad usare la onRetain.... per salvare l'immagine e fammi sapere.

Offline checo79

  • Nuovo arrivato
  • *
  • Post: 21
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    magic
  • Sistema operativo:
    supereclair 8.2
Re:Problemi legati alla rotazione
« Risposta #8 il: 20 Marzo 2010, 11:58:30 CET »
0
allora prova ad usare la onRetain.... per salvare l'immagine e fammi sapere.
così dovrebbe andare?
Codice (Java): [Seleziona]
public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);    
                    setContentView(R.layout.main);
                    imgView=(ImageView)findViewById(R.id.image1);
                    imgView.setOnClickListener(getImageBtnOnClick);
                    if (getLastNonConfigurationInstance()== null)
                        {
                        numero= generatore.nextInt(5000);
                    image = ImageOperations(getApplicationContext(),"url","image.jpg");                
                    imgView.setImageDrawable(image);  
                    }
                        else
                        {
                        image = (Drawable) getLastNonConfigurationInstance();
                        imgView.setImageDrawable(image);  
                    }
                    onRetainNonConfigurationInstance();


 @Override
            public Object onRetainNonConfigurationInstance() {
                final Drawable list = image;
                return list;
            }
« Ultima modifica: 20 Marzo 2010, 12:07:31 CET da checo79 »

Offline noodles

  • Utente junior
  • **
  • Post: 130
  • Respect: +8
    • Mostra profilo
  • Dispositivo Android:
    Google Nexus One
  • Sistema operativo:
    Mac OS X Snow Leopard
Re:Problemi legati alla rotazione
« Risposta #9 il: 20 Marzo 2010, 12:16:42 CET »
0
no. La onRetain... viene chiamata dal sistema prima della onDestroy() o forse prima della onStop() ora non ricordo, ma non devi esplicitamente chiamarla tu.

Offline checo79

  • Nuovo arrivato
  • *
  • Post: 21
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    magic
  • Sistema operativo:
    supereclair 8.2
Re:Problemi legati alla rotazione
« Risposta #10 il: 20 Marzo 2010, 12:26:07 CET »
0
a ok, cmq così funziona ugualmente, si vede che va a sovrascriverla.
grazie mille mila!

Offline noodles

  • Utente junior
  • **
  • Post: 130
  • Respect: +8
    • Mostra profilo
  • Dispositivo Android:
    Google Nexus One
  • Sistema operativo:
    Mac OS X Snow Leopard
Re:Problemi legati alla rotazione
« Risposta #11 il: 21 Marzo 2010, 19:54:14 CET »
0
a ok, cmq così funziona ugualmente, si vede che va a sovrascriverla.
grazie mille mila!

di nulla!

Offline noodles

  • Utente junior
  • **
  • Post: 130
  • Respect: +8
    • Mostra profilo
  • Dispositivo Android:
    Google Nexus One
  • Sistema operativo:
    Mac OS X Snow Leopard
Re:Problemi legati alla rotazione
« Risposta #12 il: 21 Marzo 2010, 19:55:31 CET »
0
credo sia meglio lasciarla gestire direttamente al sistema, è fatta proprio per questo ;)

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:Problemi legati alla rotazione
« Risposta #13 il: 21 Marzo 2010, 20:30:15 CET »
0
per tutti gli interessati ho preparato un tutorial che potrebbe tornarvi utile in caso aveste dei problemi legati alla rotazione del dispositivo.

Saluti.
Qlimax