Autore Topic: Dati UI assenti al primo avvio del fragment.  (Letto 279 volte)

Offline kayser

  • Nuovo arrivato
  • *
  • Post: 5
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
Dati UI assenti al primo avvio del fragment.
« il: 07 Marzo 2015, 19:59:30 CET »
0
Salve a tutti,
l'applicazione che sto sviluppando è costituita da una MainActivity che contiene al suo interno 2 fragment.
Come è noto, nel codice del fragment la parte relativa al binding con l'interfaccia viene posta nel metodo onCreateView.
In particolare nel fragA è presente una listView (lista) i cui futuri dati si trovano in un ArrayList (dati), e il corretto adattamento avviene con un (adapter) nel metodo bindDataToListView(dati,lista,adapter) (quindi ci sarà al suo interno l'istruzione lista.setAdapter(adapter) ). Tale metodo semplicemente associa alla lista un SimpleAdapter (come nel tutorial sul forum).
Il metodo bindDataToListView(..) inoltre è stato posto nell'OnCreateView e nell'onResume() (per fare il refresh quando passo da un fragment all'altro.).

Il mio problema è il seguente: la prima volta che installo l'applicazione il contenuto della listView di fragA risulta (graficamente) vuoto , ma se provo a cambiare orientamento dello schermo magicamente i dati appaiono. Ovviamente ci tengo a precisare che dati non è vuoto e che il metodo bindDataToListView è funzionante in quanto viene usato anche dall'altro fragment.

Ho fatto diversi tentativi, tra cui:
  • Chiamare il metodo  bindDataToListView(..) nell'onCreate, ma giustamente da errore in quanto la View ancora non è pronta
  • provare a chiamare il metodo anche nell'onActivityCreated, ma nulla

Codice (Java): [Seleziona]
@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
       
       this.root= inflater.inflate(R.layout.fragmentA, container, false);
       this.lista= (ListView) this.root.findViewById(R.id.listView);
       
       (new LayoutControl(getActivity().getApplicationContext())).bindDataToListView(data,lista,adapter);
       ....
       return root;
}

Offline LonelyWolf

  • Utente junior
  • **
  • Post: 148
  • Respect: +12
    • Mostra profilo
    • Traversate dei laghi
  • Dispositivo Android:
    GT-I9505, ALE-L21
  • Sistema operativo:
    Windows 7 32/64
Re:Dati UI assenti al primo avvio del fragment.
« Risposta #1 il: 10 Marzo 2015, 17:38:41 CET »
0
Ma bindDataToListView cosa fa esattamente? Puoi postare il codice?

Io nei miei fragment onCreateView chiamo una funzione specifica  [private void populateList()] che:
1 - recupera i dati dal database e aggiunge all'arraylist
2 - crea l'adapter specifico (nei miei 4 fragment ognuno è differente)
3 - imposta l'adapter alla listview

E il problema non si presenta (a meno che il database sia vuoto! :D )
Se la mia risposta ti è utile, per favore un thanks!

Offline kayser

  • Nuovo arrivato
  • *
  • Post: 5
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
Re:Dati UI assenti al primo avvio del fragment.
« Risposta #2 il: 11 Marzo 2015, 13:59:35 CET »
0
Ciao LonelyWolf!
In primis ti ringrazio per la risposta. Per quanto riguarda il metodo fa esattamente i tuoi punti 2 e 3.
Comuque ho risolto: effettivamente risultava che i dati da caricare ancora non erano stati scaricati del tutto tramite asynctask..insomma un problema di concorrenza proprio "banale" a cui non avevo pensato!

Al momento ho risolto anticipando il caricamento, ma penso di inserire uno splashScreen per attendere il caricamento dei dati.