2012-11-14 25 views
6

Ich habe ein Problem, das ich habe noch nie fast drei Jahre zuvor in hatte mit Android zu entwickeln ...setText setzt keinen Text EditText

Ich mag ein Bild machen und nach dem Bild genommen, werden die EditText s der Aktivität klar. Was ich mache, ist die Werte EditText zu Strings mit getText().toString(), um sie nach der Aufnahme wiederherzustellen.

Die Saiten sind perfekt mit den Daten gespeichert, aber wenn ich setText verwende, funktioniert es nicht ... Das seltsame ist, dass setHint funktioniert!

Wie kann es sein?

Hier ist der Code, den ich mit:

@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 und description global sind EditTexts und tempSpotName und tempSpotDescStrings global sind.

Wie kann ich den Text einstellen?

+1

können wir Ihren Layout-XML-Code sehen? Erreichst du sogar name.setText (tempSpotName); ? Hast du das debuggt? – Goot

+0

Einfach überprüfen, aber setText wird aufgerufen, aber nicht korrekt angezeigt? Die if-Anweisung verhindert nicht, dass sie aufgerufen wird? (einfach überprüfen, da setText funktionieren sollte) – AJak

+0

Nennen Sie 'setText()' irgendwo anders? Möglicherweise in 'onResume()'? – Sam

Antwort

14

onActivityResult() ist nicht die letzte Methode aufgerufen wird, wenn auf eine Rückkehr Aktivität. Sie können Ihren Speicher von the Life Cycle in den Dokumenten aktualisieren. :)

Wie wir in den Kommentaren diskutiert haben, wenn Sie setText() wieder in Methoden wie onResume() aufrufen, überschreibt dies jeden Text, der in onActivityResult() gesetzt wird.

Das gleiche gilt für Fragmente, Sie müssen die onViewStateRestored() -Methode aktualisieren (die in API 17 hinzugefügt wurde).

+0

Alle Änderungen in onResume() überschreiben auch Änderungen in onNewIntent(). –

+0

Das gleiche gilt für Fragmente, Sie müssen die onViewStateRestored() -Methode aktualisieren (die in API 17 hinzugefügt wurde). – Eugene

3

Zuerst müssen Sie dies debuggen.

Es gibt eine Klasse namens TextWatcher. Dies wird jedes Mal aufgerufen, wenn sich Textbox.Text ändert. So ist es einfacher zu debuggen und das Problem zu behandeln. URL: http://developer.android.com/reference/android/text/TextWatcher.html

Beispiel für die Implementierung:

name.addTextChangedListener (neu 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(); 



    } 

}); 

Viel Glück :)

0

Sie können einen EditText.SetText erzwingen ("blablabla ..."); Ergebnis in Ihrem onActivity in 3 einfachen Schritten:

  1. neu laden Ihr Layout in Ihre Aktivität
  2. Rebind Ihre EditText
  3. Verwendung SetText wie üblich.

in diesem Beispielcode, gebe ich eine URL-Zeichenfolge mit und Absicht und schreiben sie in eine 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

Einige Male edittext in onactivity Ergebnis Wechsel nicht funktioniert.Ich konfrontiert zu dem gleichen Problem

statt in onactivityresult

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

zu folgenden

edittext.settext("yourtext"); 

Einstellung ändern Sie für mich gearbeitet.

Verwandte Themen