Autore Topic: Condividere variabile tra più istanze di un Fragment  (Letto 621 volte)

Offline Giacomo79

  • Utente junior
  • **
  • Post: 123
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Google Nexus One
  • Play Store ID:
    Big and Fish
  • Sistema operativo:
    Android 2.3
Condividere variabile tra più istanze di un Fragment
« il: 07 Ottobre 2014, 12:29:46 CEST »
0
Salve a tutti,
vorrei condividare una variabile tra 3 istanze di uno stesso fragment.

E' possibile?

Grazie

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Condividere variabile tra più istanze di un Fragment
« Risposta #1 il: 07 Ottobre 2014, 14:42:00 CEST »
0
Se questi tre fragment stanno nella stessa Activity puoi usare quest'ultima come "ponte".


Offline Giacomo79

  • Utente junior
  • **
  • Post: 123
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Google Nexus One
  • Play Store ID:
    Big and Fish
  • Sistema operativo:
    Android 2.3
Re:Condividere variabile tra più istanze di un Fragment
« Risposta #2 il: 07 Ottobre 2014, 15:37:42 CEST »
0
Se questi tre fragment stanno nella stessa Activity puoi usare quest'ultima come "ponte".
Si, sono nella stessa activity ma in un viewpager.

Avevo pensato a quello, ma volevo sapere se c'era un'altra possibilità.

Per sapere, come faresti il ponte?

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Condividere variabile tra più istanze di un Fragment
« Risposta #3 il: 07 Ottobre 2014, 17:05:36 CEST »
0
Activity:

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

    public void setValue(int value){
        mValue = value;
    }

    public int getValue(){
        return mValue;
    }
}

Fragment:

Codice (Java): [Seleziona]
((MyActivity) getActivity).getValue();
Tra l'altro anche se usi un ViewPager puoi utilizzare tranquillamente questo metodo.
« Ultima modifica: 07 Ottobre 2014, 17:07:07 CEST da Ricky` »

Offline nibbler

  • Nuovo arrivato
  • *
  • Post: 14
  • Respect: +2
    • Mostra profilo
  • Dispositivo Android:
    Htc sensantion XL
  • Sistema operativo:
    windows 7
Re:Condividere variabile tra più istanze di un Fragment
« Risposta #4 il: 07 Ottobre 2014, 23:25:58 CEST »
0
Ciao
Un altra soluzione...ma da usare con cautela...
E' possibile all'interno del fragment creare una variabile statica e quindi accessibile a tutte le istanze della classe senza passare dall'activity.

Offline Giacomo79

  • Utente junior
  • **
  • Post: 123
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Google Nexus One
  • Play Store ID:
    Big and Fish
  • Sistema operativo:
    Android 2.3
Re:Condividere variabile tra più istanze di un Fragment
« Risposta #5 il: 08 Ottobre 2014, 00:33:01 CEST »
0
Ciao
Un altra soluzione...ma da usare con cautela...
E' possibile all'interno del fragment creare una variabile statica e quindi accessibile a tutte le istanze della classe senza passare dall'activity.
Ho provato a crearla statica ma ho visto che in realtà le variabili delle varie istanze non puntano allo stesso oggetto. Possibile?

Offline nibbler

  • Nuovo arrivato
  • *
  • Post: 14
  • Respect: +2
    • Mostra profilo
  • Dispositivo Android:
    Htc sensantion XL
  • Sistema operativo:
    windows 7
Re:Condividere variabile tra più istanze di un Fragment
« Risposta #6 il: 08 Ottobre 2014, 11:28:02 CEST »
0
Ho provato a crearla statica ma ho visto che in realtà le variabili delle varie istanze non puntano allo stesso oggetto. Possibile?

Ciao
In java ...come ti ho detto le istanze dell'oggetto accedono alla stessa variabile...di seguito un esempio classico

public class Person
 {
   
   private static int counter=0;
   private int number;
   
   public Person()
   {
      counter++;
      number=counter;
   }

   public int getNumber() {
      return number;
   }

   public void setNumber(int number) {
      this.number = number;
   }   
}


Quando crei una persona gli assegni un valore che continua a incrementare ed è condiviso da tutte le istanze di persona (nel caso lo modificassi in pubblico sarebbe accessibile all'esterno).

Offline Giacomo79

  • Utente junior
  • **
  • Post: 123
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Google Nexus One
  • Play Store ID:
    Big and Fish
  • Sistema operativo:
    Android 2.3
Re:Condividere variabile tra più istanze di un Fragment
« Risposta #7 il: 08 Ottobre 2014, 14:43:54 CEST »
0
Lo sapevo anche io, solo che ho notato che se la variabile statica è un oggetto, in debug le varie istanze della classe hanno la variabile statica dell'oggetto con un id diverso, quindi immagino puntino a diversi oggetti.

Offline nibbler

  • Nuovo arrivato
  • *
  • Post: 14
  • Respect: +2
    • Mostra profilo
  • Dispositivo Android:
    Htc sensantion XL
  • Sistema operativo:
    windows 7
Re:Condividere variabile tra più istanze di un Fragment
« Risposta #8 il: 08 Ottobre 2014, 16:01:09 CEST »
0
Lo sapevo anche io, solo che ho notato che se la variabile statica è un oggetto, in debug le varie istanze della classe hanno la variabile statica dell'oggetto con un id diverso, quindi immagino puntino a diversi oggetti.

Nel caso di un oggetto e non di tipo primitivo ricordati nel costruttore di fare un solo new!

Qualcosa tipo:

public static Mio m;

public Person()
{
   if(m==null)
        m=  new Mio();
}   


Offline Giacomo79

  • Utente junior
  • **
  • Post: 123
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Google Nexus One
  • Play Store ID:
    Big and Fish
  • Sistema operativo:
    Android 2.3
Re:Condividere variabile tra più istanze di un Fragment
« Risposta #9 il: 08 Ottobre 2014, 18:17:06 CEST »
0
Nel caso di un oggetto e non di tipo primitivo ricordati nel costruttore di fare un solo new!

Qualcosa tipo:

public static Mio m;

public Person()
{
   if(m==null)
        m=  new Mio();
}
Ora sembra che vada.

Quali sono le controindicazioni?

Offline nibbler

  • Nuovo arrivato
  • *
  • Post: 14
  • Respect: +2
    • Mostra profilo
  • Dispositivo Android:
    Htc sensantion XL
  • Sistema operativo:
    windows 7
Re:Condividere variabile tra più istanze di un Fragment
« Risposta #10 il: 08 Ottobre 2014, 21:49:29 CEST »
0
In generale si ottiene una certa perdita nella leggibilità del codice.

Offline iceweasel

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 878
  • Respect: +147
    • Mostra profilo
  • Dispositivo Android:
    LGE P990 - Google Nexus 5
  • Sistema operativo:
    Linux Debian Sid
Re:Condividere variabile tra più istanze di un Fragment
« Risposta #11 il: 09 Ottobre 2014, 00:03:02 CEST »
0
Non si usano variabili statiche per condividere oggetti molto complessi come gli elementi dall'interfaccia grafica di Android. Nel caso di rigenerazione della View da parte del framework di Android si creano dei memory leak:

http://android-developers.blogspot.it/2009/01/avoiding-memory-leaks.html?m=1

Condividere dati globali una soluzione elegante e funzionale sono i Singleton:

http://it.m.wikipedia.org/wiki/Singleton


Inviato dal mio Nexus 5 utilizzando Tapatalk

adb logcat | tee /tmp/logcat | grep TAG

Offline nibbler

  • Nuovo arrivato
  • *
  • Post: 14
  • Respect: +2
    • Mostra profilo
  • Dispositivo Android:
    Htc sensantion XL
  • Sistema operativo:
    windows 7
Re:Condividere variabile tra più istanze di un Fragment
« Risposta #12 il: 09 Ottobre 2014, 09:21:30 CEST »
0
Ciao iceweasel
Conosco la possibilità di generare leaks creando oggetti statici quali viste o Handler.
Giacomo79 voleva condividere solo alcuni valori tra istanze della stessa classe..se essi no salvano alcun contesto interno e vengono usati con criterio non generano alcun leaks.
Condivido con tè il fatto che possano esistere soluzioni alternative più leggibili e altrettanto efficienti.