Autore Topic: refresh fragment  (Letto 1554 volte)

Offline ponticello

  • Utente junior
  • **
  • Post: 50
  • Respect: +2
    • Mostra profilo
  • Dispositivo Android:
    galaxy s2
  • Play Store ID:
    littlebridge
  • Sistema operativo:
    ubuntu 10.10
refresh fragment
« il: 23 Luglio 2012, 14:27:30 CEST »
0
Buongiorno a tutti

Allora ho un FragmentActivity con 2 Fragment attaccati che contengono dei bottoni
i bottoni fanno partire una seconda activity...
se dalla seconda activity (la quale genera un cambiamento su db che influisce sulla grafica dei fragment)
io torno al FragmentActivity questo non si rigenera ma crea lo stesso Fragment
se tento di replicare nel metodo onStart il meccanismo che della creazione dei Fragment vedo tramite debug che il flusso non passa per onCreateView (Fragment) e quindi il risultato è:
se cerco di rigenerare il Fragment pagina nera
se non faccio niente al momento del ritorno sul FragmentActivity o quella vecchia

Grazie a tutti
Le mie app sullo store

    

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:refresh fragment
« Risposta #1 il: 23 Luglio 2012, 14:41:26 CEST »
+1
Io sinceramente eviterei di ricreare da 0 tutto il Fragment ma piuttosto mi limiterei a rinfrescare i dati che esso mostra.
Potresti, ad esempio, creare nel tuo Fragment un metodo refreshData() che ha l'effetto di aggiornare i dati che il fragment mostra.
Poi semplicemente nel metodo onStart dell'activity recuperi il riferimento al Fragment e chiami il metodo refreshData().

Offline ponticello

  • Utente junior
  • **
  • Post: 50
  • Respect: +2
    • Mostra profilo
  • Dispositivo Android:
    galaxy s2
  • Play Store ID:
    littlebridge
  • Sistema operativo:
    ubuntu 10.10
Re:refresh fragment
« Risposta #2 il: 23 Luglio 2012, 16:22:20 CEST »
0
Il mio problema e che non so neanche come si ricrea da 0 anche volendo.... :-(
Comunque diciamo che l'idea del metodo che refrescia mi piace
Io dentro la mia FragmentActivity ho questo pezzo di codice preso da un tutorial di questo sito
Codice (Java): [Seleziona]
 public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);        
               
                    initializeDb();
                    initialize();
                    initializeLivelli();
                   
                    setContentView(R.layout.menu_fragment);
                     
                    // creating fragments and adding to list
                    fragments = new Vector<Fragment>();    
                    Fragment menuPage1 = Fragment.instantiate(getApplicationContext(), MenuPage1.class.getName());
                    Fragment menuPage2 = Fragment.instantiate(getApplicationContext(), MenuPage2.class.getName());
                    fragments.add(menuPage1);
                    fragments.add(menuPage2);
                     
                    // creating adapter and linking to view pager
                    this.mPagerAdapter = new PagerAdapter(super.getSupportFragmentManager(),fragments);
                    mPager = new ViewPager(getApplicationContext());
                    mPager = (ViewPager) super.findViewById(R.id.pager);
                    mPager.setAdapter(this.mPagerAdapter);
           }

questo invece è il codice del mio fragment
Codice (Java): [Seleziona]
  public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState) {
                     
                      // fragment not when container null
                      if (container == null) {
                         return null;
                      }
                      // inflate view from layout
                      View view = (LinearLayout)inflater.inflate(R.layout.menu,container,false);
                     
                      TableLayout table = (TableLayout) view.findViewById(R.id.table);
                      //logica di creazione TableLayout

                      return view;
                   }

se volessi fare quello che mi hai consigliato come devo procedere??
Le mie app sullo store

    

Offline Melanogaster

  • Utente normale
  • ***
  • Post: 260
  • Respect: +11
    • Mostra profilo
  • Dispositivo Android:
    SII
  • Sistema operativo:
    Kubuntu
R: refresh fragment
« Risposta #3 il: 23 Luglio 2012, 20:15:36 CEST »
0
Sarei interessato anche io...
Attualmente infatti per aggiornare faccio 'classicamente' prima un finish() e poi lancio la stessa activity.

Inviato dal mio GT-I9100 con Tapatalk 2

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:refresh fragment
« Risposta #4 il: 24 Luglio 2012, 09:33:35 CEST »
+1
ponticello devo fare qualche prova per vedere se la soluzione che ti ho proposto va bene anche per chi come te usa un ViewPager.
Appena ho tempo vedo di fare un piccolo tutorial, magari usando https://github.com/greenrobot/EventBus, che è una libreria per realizzare bus di comunicazione che ha lo scopo appunto di semplificare la comunicazione tra i vari componenti dell'applicazione e quindi ti aiuterebbe anche in questo caso.

Offline ponticello

  • Utente junior
  • **
  • Post: 50
  • Respect: +2
    • Mostra profilo
  • Dispositivo Android:
    galaxy s2
  • Play Store ID:
    littlebridge
  • Sistema operativo:
    ubuntu 10.10
Re:refresh fragment
« Risposta #5 il: 24 Luglio 2012, 14:42:20 CEST »
+1
Io personalmente sono riuscita a raggiungere il mio obbietti posto il codice per i prossimi lettori
Codice (Java): [Seleziona]
 protected void onStart() {
              super.onStart();
                                             
              initializeLivelli();
             
              MenuPage1 menuPage1 = (MenuPage1) fragments.get(0);
              View menuPage1View = menuPage1.getView();
              if(menuPage1View != null){
                  menuPage1.caricaTable(menuPage1View);
              }
             
              MenuPage2 menuPage2 = (MenuPage2) fragments.get(1);
              View menuPage2View = menuPage2.getView();
              if(menuPage2View != null){
                  menuPage2.caricaTable(menuPage2View);
              }
           }

nel onStart dell'activityFragment ho rilanciato la query per riprendermi i valori da di tramite il metodo initializeLivelli()
dopo o instanziato i due fragment il controllo sul null serve a fare questa operazione la seconda volta che si chiama l'activityFragment perche la prima volta che ci passa i 2 Fragment ancora non sono stati creati e il risultato e un bel null
se non sono null riciamo un metodo che prende come parametro la view del Fragment
il metodo caricaTable non fa altro che cancellare tutti i figli della view e ricrearli con i valori presi dal db aggiornati
spero di essere stato di aiuto
Cmq grazie di tutto Ricky
Le mie app sullo store

    

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:refresh fragment
« Risposta #6 il: 24 Luglio 2012, 14:47:24 CEST »
0
Ottimo, grazie per aver postato come hai risolto.