2012-11-14 25 views
6

Sto avendo un problema che non ho mai avuto prima in quasi tre anni di sviluppo con Android ...setText non imposta testo per EditText

voglio scattare una foto e dopo l'immagine è taked, gli EditText s dell'attività risultano chiari. Quello che sto facendo è impostare i valori di EditText su usando getText().toString() per ripristinarli dopo aver scattato la foto.

Le stringhe sono memorizzate perfettamente con i dati, ma quando uso setText, non funziona ... La cosa strana è che setHint funziona!

Come può essere?

Ecco il codice che sto utilizzando:

@Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if (requestCode == CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE) { 
      if (resultCode == RESULT_OK) { 
       // Image captured and saved to fileUri specified in the Intent 

       grabImage(imgView); 

       for (int u = 0; u <= 2; u++) 
       { 
        if (savedImgs[u].equals("")) 
        { 
         imgs = u + 1; 
         savedImgs[u] = photo.toString(); 
         break; 
        } 
       } 

       /*Bitmap thumbnail = (Bitmap) data.getExtras().get("data"); ---> It is a small bitmap, for icons... 
       imgView.setImageBitmap(thumbnail); 
       imgView.setVisibility(View.VISIBLE);*/ 

      } else if (resultCode == RESULT_CANCELED) { 
       // User cancelled the image capture 
      } else { 
       Toast.makeText(this, "Image couldn't be taken. Try again later.", Toast.LENGTH_LONG).show(); 
      } 
     } 

     if (!tempSpotName.equals("") || !tempSpotDesc.equals("")) { 

      name.setText(tempSpotName); 
      description.setText(tempSpotDesc); 
     } 
    } 

name e description sono globali e EditTextstempSpotName e tempSpotDesc sono globali Strings.

Come posso impostare il testo?

+1

potremmo vedere il tuo codice xml di layout? Raggiungi persino name.setText (tempSpotName); ? Hai eseguito il debug di questo? – Goot

+0

Basta controllare, ma setText viene chiamato ma non viene visualizzato correttamente? L'istruzione if non impedisce di essere chiamata? (solo doppio controllo dal momento che setText dovrebbe funzionare) – AJak

+0

Stai chiamando 'setText()' da qualche altra parte? Forse in 'onResume()'? – Sam

risposta

14

onActivityResult() non è l'ultimo metodo chiamato al ritorno a un Attività. È possibile aggiornare la memoria di the Life Cycle nei documenti. :)

Come discusso nei commenti, se si chiama nuovamente setText() in metodi come onResume(), questo sostituirà qualsiasi set di testo in onActivityResult().

Lo stesso vale per Fragments, è necessario apportare aggiornamenti nel metodo onViewStateRestored() (che è stato aggiunto in API 17).

+0

Eventuali modifiche a onResume() annullano anche le modifiche in onNewIntent(). –

+0

Lo stesso vale per Fragments, è necessario apportare aggiornamenti nel metodo onViewStateRestored() (che è stato aggiunto in API 17). – Eugene

3

Prima di tutto è necessario eseguire il debug di questo.

Esiste una classe denominata TextWatcher. Questo verrà chiamato ogni volta che Textbox.Text cambierà. Quindi è più facile eseguire il debug e gestire il problema. Url: http://developer.android.com/reference/android/text/TextWatcher.html

Esempio di applicazione:

name.addTextChangedListener (nuova TextWatcher() {

@Override 
    public void afterTextChanged(Editable s) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void beforeTextChanged(CharSequence s, int start, int count, int after) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void onTextChanged(CharSequence s, int start, int before, int count) { 

     doSomething(); 



    } 

}); 

Buona fortuna :)

0

È possibile forzare un EditText.SetText ("blablabla ..."); all'interno del vostro onActivity Risultato in 3 semplici passaggi:

  1. Ricarica il layout nella vostra attività
  2. associare nuovamente il vostro EditText
  3. uso SetText come al solito.

In questo codice di esempio, mi passa una stringa URL con e l'intento e lo scrive in un TextView:

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) 
{  
    if (resultCode == RESULT_OK) 
    { 
     QRdata= data.getStringExtra("QRURL"); 

     if (QRdata.length()>0) 
     { 
          //Step1 
      setContentView(R.layout.activity_confirmpackage); 
          //Step2 
      TextView qrtxt=(TextView)this.findViewById(R.id.qrurl); 
          //Setp 3,Voilà! 
      qrtxt.setText(QRdata.toString()); 
     } 
2

Alcune volte cambiando edittext in onactivity risultato non sta funzionando.Anche ho affrontato lo stesso problema

invece di impostare

edittext.settext("yourtext"); 

modifica segue in onactivityresult

edittext.post(new Runnable(){ 
edittext.settext("yourtext"); 
}); 

Ha funzionato per me.

Problemi correlati