2013-03-30 21 views
7

Ciao. Non so cosa sta succedendo. Sto cercando di cambiare il testo di un EditText durante la creazione di un DialogFragment, ma lo EditText non sta aggiornando il testo. Se chiamo getText().length(), noto che il contenuto di EditText è cambiato. Ma la visuale rimane la stessa, solo vuota.Android EditText setText non sta aggiornando il testo

Perché?

Grazie in anticipo le persone

Ecco il codice:

public class ItemNameDialog extends DialogFragment { 
    @Override 
    public Dialog onCreateDialog(final Bundle bundle) { 
     System.out.println("ON CREATE DIALOG WAS CALLED"); //This appears on LogCat, so this method is called.. the problem is not that 

     AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 
     builder.setTitle("Configure an item to count:"); 

     LayoutInflater inflater = getActivity().getLayoutInflater(); 

     View view = inflater.inflate(R.layout.itempick_layout, null); 
     builder.setView(view); 

     final CheckBox box = (CheckBox) view.findViewById(R.id.itemSenseCheckBox); 
     final EditText itemNameBox = (EditText) view.findViewById(R.id.itemNameText); 
     final Spinner spinner = (Spinner) view.findViewById(R.id.itemsDefault); 
     final int viewIDClicked = getArguments().getInt(clickableViewID); 
     final String actualName = getArguments().getString(actualNameItemView); 

     System.out.println("H - before: " + itemNameBox.getText().toString().length()); //it appears on logcat "H - before: 0" 
     itemNameBox.setText(actualName); 
     System.out.println("H - after: " + itemNameBox.getText().toString().length()); //it appears on logcat "H - before: 3" so why not changing ? 

     return builder.create(); 
    } 
} 
+2

provare a cambiare il colore del carattere nella EditText –

+0

non ha ancora aiuto gemella .. ma grazie per il vostro sforzo – TiagoM

+1

@DarkLink: invece di stampare la lunghezza prova a stampare 'itemNameBox.getText(). ToString()' e controlla il testo nel log o no –

risposta

4

Il mio problema era che al di sotto di quel codice, e prima della fine del metodo onCreateDialog, ho avuto un paio di metodi che controllano una filatrice.
Il primo elemento di quel filatore ha lo scopo di "selezionare nulla" e in quella scelta punto stavo solo cancellando il contenuto di quel testo di modifica, in questo modo:

@Override 
public void onItemSelected(AdapterView<?> parent, View view, 
       int pos, long id) { 

if(pos == 0){ 
    if(editText.length() != 0) 
     editText.setText(""); 
} 

E non sapevo che durante la creazione del spinner, fa scattare l'evento "onItemSelected" e per questo motivo, l'edittext è stato cancellato ogni volta, anche quando non ho cliccato su quell'elemento dello spinner ..

Quindi sono riuscito a superare questo da un semplice booleano. Ogni volta che il metodo suCreateDialog metto il booleano su true, e quindi il mio onItemSelected funziona solo quando quel bolean è falso.
Come il codice qui sotto:

@Override 
public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) { 

    if(firstGoingSpinner){ 
      firstGoingSpinner = false; 

     }else{ 
      if(pos == 0){ 
       if(editText.length() != 0) 
        editText.setText(""); 

      }else{ 
       editText.setText(""+parent.getItemAtPosition(pos)); 
       Editable etext = editText.getText(); 
       Selection.setSelection(etext, editText.length()); 
      } 

     } 
    } 


Spero che questo aiuta qualcuno in futuro;)

Problemi correlati