2011-05-05 18 views
12

Sto costruendo un'app che ottiene il suo layout basato su dati esterni. Il layout è diviso in blocchi diversi a seconda dell'indata. Questi blocchi vengono visualizzati con l'aiuto di un viewflipper. In ogni blocco c'è, al momento, una o più "textview" e "edittext". Nella prima pagina del flipper tutti i dati vengono visualizzati come dovrebbero nelle visualizzazioni di testo e in edittexts. Ma sulle altre pagine del viewflipper il valore in edittexts non viene mostrato fino a quando l'edittext non viene messo a fuoco. Non ho idea del perché. Quindi per essere chiari. I valori per tutti gli edittexts sono effettivamente lì, ma non vengono visualizzati fino a quando l'edittext non viene messo a fuoco. Il problema è lo stesso su tutti i dispositivi su cui ho eseguito l'app (emulatore, HTC Desire, HTC Wildfire). Qualcuno sa come risolvere questo problema?Il valore in edittext non viene visualizzato finché non viene attivato. Android

Qui è la classe che generano il layout:

public class ModuleLayout extends LinearLayout { 

public ModuleLayout(Context context, ArrayList<BaseModuleItem> itemList) { 
    super(context); 
    TableLayout tempTable = new TableLayout(context); 

     for (int i = 0; i < itemList.size(); i++) 
     { 
      TableRow tempRow = new TableRow(context); 
      TextView tempTextView = new TextView(context); 
      tempTextView.setText(itemList.get(i).getName()); 

      EditText tempEditText = new EditText(context); 
      tempEditText.setText(itemList.get(i).getItemValue()); 

      tempRow.addView(tempTextView); 
      tempRow.addView(tempEditText); 

      tempTable.addView(tempRow); 
     } 

     tempTable.setColumnStretchable(1, true); 
     this.addView(tempTable); 
    } 
} 

ecco una foto del problema in azione.

L'immagine a sinistra mostra tutti i suoi valori bene. L'immagine a destra si trova nella seconda posizione nel viewflipper e non mostra i valori negli edittexts, con l'eccezione per i primi che hanno lo stato attivo. Dovrei anche dire che dopo che un edittext è stato focalizzato, continua a mostrare il valore anche se lancio altre view nel viewflipper e poi di nuovo.

+0

Sei in grado di inviare il codice minimo completo necessario per replicare il tuo problema? –

+0

Penso di aver ristretto il problema al viewflipper che popolano questi widget. Non ho alcun problema con esso se dico al viewflipper di visualizzare la vista successiva eseguendo il comando SetCurrentView (int) ;. Il problema è quando eseguo il fling (animare la vista per seguire il mio dito). Sto girovagando con i parametri "andato", "invisibile" e "visibile". Pubblicherò il codice quando avrò tempo. Devo ritagliarlo prima di poterlo postare qui. – taktiger

+0

Hai mai risolto questo problema? – Merlin

risposta

0

Non avendo visualizzato il tuo codice completo sto facendo un po 'di ipotesi-suggerimento ma hai provato textView.invalidate() (se chiama da thread GUI) o textView.postInvalidate() (se chiama da un altro thread) ?

1

Quel layout da come appare qui non è sul thread dell'interfaccia utente, il che significa che non importa ciò che si modifica, non vedrete nulla fino a quando gli aggiornamenti del thread UI (noto anche come Main Thread). L'interfaccia utente/thread principale è ciò che attraversano tutte le attività, quindi è facile pensare che le cose si aggiornino automaticamente (poiché la maggior parte del lavoro precedente che hai svolto è anche da qualche parte all'interno dell'attività, presumo). L'evento onFocusChanged (facendo clic sull'editoriale) aggiornerà il thread dell'interfaccia utente invocando invalidate() su se stesso. Puoi forzarlo ad aggiornare chiamando EditText.invalidate() se necessario, ma di solito è meglio aggiornarlo naturalmente dopo la creazione. Senza vedere il resto del codice questo è il meglio che posso fare per te, spero che questo aiuti :)

Problemi correlati