Wert eines Textfelds bearbeiten abrufen


439

Ich lerne, wie man UI-Elemente erstellt. Ich habe einige EditText-Eingabefelder erstellt. Mit einem Klick auf eine Schaltfläche möchte ich den in dieses Eingabefeld eingegebenen Inhalt erfassen.

<EditText android:id="@+id/name" android:width="220px" />

Das ist mein Feld. Wie kann ich den Inhalt bekommen?


21
Die Anzahl der Upvotes beweist etwas, dass das Überschreiben toStringnicht die auffindbarste API ergibt, auch wenn die Technik ausgefallen ist.
vemv

29
Die Grammatik und das Gefühl in Ihrem Kommentar sind wirklich schwer zu verstehen ...
IcedDante

7
@vemv Das Problem mit der API besteht darin, ein EditableObjekt zurückzugeben, das Benutzer String99% der Fälle erwarten und benötigen .
Amir Ali Akbari

Ich finde Android cool, aber ich bin überrascht, dass ich dafür Google musste (und wie man erkennt, wenn sich der Wert geändert hat und zum Auslesen bereit ist, was kompliziert sein kann). Ich denke, sie haben das schwieriger als nötig gemacht!
Nsandersen

Antworten:


684

Mit getText ():

Button   mButton;
EditText mEdit;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    mButton = (Button)findViewById(R.id.button);
    mEdit   = (EditText)findViewById(R.id.edittext);

    mButton.setOnClickListener(
        new View.OnClickListener()
        {
            public void onClick(View view)
            {
                Log.v("EditText", mEdit.getText().toString());
            }
        });
}

7
Wenn Sie EditText nicht in den klassenweiten Bereich einfügen und stattdessen in OnCreate deklarieren, soll es als endgültig deklariert werden. Ich nehme an, es ist besser, es nicht endgültig zu machen, aber ist es der einzige Weg, es klassenweit zu machen? Ist es der beste Weg, dies klassenweit zu tun?
PFranchise

1
@PFranchise Was meinst du mit "klassenweit"? Paket geschützt (wie im Beispiel)? Privat? Warum möchten Sie nicht, dass ein Widget in der gesamten Klasse verfügbar ist?
Zelphir Kaltstahl

3
<rant> Keine Anfrage nach weiteren Informationen oder Vorschlägen. Auch kein Dank oder +1. DAS IST FÜRCHTERLICH! Warum sollte jemand denken, dass dies der richtige Weg ist, um ein Textfeld zu entwerfen? Außerdem ist EditText der am wenigsten intuitive Name, den sie finden konnten. </ rant>
Roy Falk

22

Ich denke, Sie müssen diesen Code verwenden, wenn Sie das "mEdit" Ihres EditText-Objekts aufrufen:

myActivity.this.mEdit.getText().toString()

Stellen Sie einfach sicher, dass der Compiler weiß, welche EditTexter aufrufen und verwenden soll.


7
Sie sollten eine Erklärung hinzufügen, woher das "mEdit" kommt.
null

18

Holen Sie sich Wert von einem EditTextSteuerelement in Android. EditText getTextEigenschaft verwenden, um Wert zu erhalten an EditText:

EditText txtname = findViewById(R.id.name);
String name      =  txtname.getText().toString();

11

Ich hoffe das sollte funktionieren:

Integer.valueOf(mEdit.getText().toString());

Ich habe versucht, Integer.getInteger()Methode statt valueOf()- es hat nicht funktioniert.


9
Dies setzt voraus, dass der Wert eine Ganzzahl ist ... nicht sicher, wo Sie das in der Frage aufgegriffen haben.
Joshua Pinter

9
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

  Button  rtn = (Button)findViewById(R.id.button);
  EditText edit_text   = (EditText)findViewById(R.id.edittext1);

    rtn .setOnClickListener(
        new View.OnClickListener()
        {
            public void onClick(View view)
            {
                Log.v("EditText value=", edit_text.getText().toString());
            }
        });
}

7

Vielleicht möchten Sie auch einen Blick auf Butter Knife werfen . Ziel ist es, die Menge des Boilerplate-Codes mithilfe von Anmerkungen zu reduzieren. Hier ist ein einfaches Beispiel:

public class ExampleActivity extends ActionBarActivity {

    @InjectView(R.id.name)
    EditText nameEditText;

    @InjectView(R.id.email)
    EditText emailEditText;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_example);
        Butterknife.inject(this);
    }

    @OnClick(R.id.submit)
    public void onSubmit() {
         Editable name = nameEditText.getText();
         Editable email = emailEditText.getText();
    }
}

Fügen Sie einfach die folgende Abhängigkeit zu Ihrer hinzu build.gradle:

compile 'com.jakewharton:butterknife:x.y.z'

Alternativ gibt es auch AndroidAnnotations .


5

Am kürzesten und am einfachsten

getText(editText);

getText(button);

getText(textView);

Kleine Problemumgehung

Machen Sie einfach eine Methode in Ihrer BaseActivity / erstellen Sie BaseActivity, wenn Sie keine haben.

public class BaseActivity extends AppCompatActivity{
    public String getText(TextView tv) {
        return tv.getText().toString().trim();
    } 
}

Und erweitern Sie alle Aktivitäten um diese BaseActivity.

public class YourActivity extends BaseActivity {
  @Override
  public void onCreate(Bundle savedInstanceState){
     getText(editText);
     getText(button);
     getText(textView);
  }
}

Beachten Sie, dass EditText, Buttonerstreckt TextView, so dass ich nur erstellt getText(TextView tv).


2

Ein fortgeschrittener Weg wäre die Verwendung von Butterknife Bindview. Dadurch wird redundanter Code eliminiert.

In Ihrem Gradle unter Abhängigkeiten; füge diese 2 Zeilen hinzu.

compile('com.jakewharton:butterknife:8.5.1') {
        exclude module: 'support-compat'
    }
apt 'com.jakewharton:butterknife-compiler:8.5.1'

Dann synchronisieren. Beispiel für die Bindung von edittext in MainActivity

import butterknife.BindView;   
import butterknife.ButterKnife; 

public class MainActivity {

@BindView(R.id.name) EditTextView mName; 
...

   public void onCreate(Bundle savedInstanceState){
         ButterKnife.bind(this); 
         ...
   }

}

Dies ist jedoch eine Alternative, wenn Sie sich wohler fühlen oder mit vielen Daten arbeiten.


1

Schritt 1: Erstellen Sie ein Layout mit dem Namen activity_main.xml

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/rl"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="10dp"
    tools:context=".MainActivity"
    android:background="#c6cabd"
    >
    <TextView
        android:id="@+id/tv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="17dp"
        android:textColor="#ff0e13"
        />
    <EditText
        android:id="@+id/et"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/tv"
        android:hint="Input your country"
        />
    <Button
        android:id="@+id/btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Get EditText Text"
        android:layout_below="@id/et"
        />
</RelativeLayout>

Schritt 2: Erstellen Sie die Klasse Main.class

public class Main extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button btn = (Button) findViewById(R.id.btn);
        final TextView tv = (TextView) findViewById(R.id.tv);
        final EditText et = (EditText) findViewById(R.id.et);
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                String country = et.getText().toString();
                tv.setText("Your inputted country is : " + country);
            }
        });
 }
}

1

String value = YourEditText.getText (). ToString;


Wie unterscheidet sich diese Antwort von bereits vorhandenen Antworten?
Matt Ke

0

Versuchen Sie diesen Code

final EditText editText = findViewById(R.id.name); // your edittext id in xml
Button submit = findViewById(R.id.submit_button); // your button id in xml
submit.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) 
    {
        String string = editText.getText().toString();
        Toast.makeText(MainActivity.this, string, Toast.LENGTH_SHORT).show();
    }
});

-8
    Button kapatButon = (Button) findViewById(R.id.islemButonKapat);
    Button hesaplaButon = (Button) findViewById(R.id.islemButonHesapla);
    Button ayarlarButon = (Button) findViewById(R.id.islemButonAyarlar);

    final EditText ders1Vize = (EditText) findViewById(R.id.ders1Vize);
    final EditText ders1Final = (EditText) findViewById(R.id.ders1Final);
    final EditText ders1Ortalama = (EditText) findViewById(R.id.ders1Ortalama);

    //

    final EditText ders2Vize = (EditText) findViewById(R.id.ders2Vize);
    final EditText ders2Final = (EditText) findViewById(R.id.ders2Final);
    final EditText ders2Ortalama = (EditText) findViewById(R.id.ders2Ortalama);
    //
    final EditText ders3Vize = (EditText) findViewById(R.id.ders3Vize);
    final EditText ders3Final = (EditText) findViewById(R.id.ders3Final);
    final EditText ders3Ortalama = (EditText) findViewById(R.id.ders3Ortalama);
    //
    final EditText ders4Vize = (EditText) findViewById(R.id.ders4Vize);
    final EditText ders4Final = (EditText) findViewById(R.id.ders4Final);
    final EditText ders4Ortalama = (EditText) findViewById(R.id.ders4Ortalama);
    //
    final EditText ders5Vize = (EditText) findViewById(R.id.ders5Vize);
    final EditText ders5Final = (EditText) findViewById(R.id.ders5Final);
    final EditText ders5Ortalama = (EditText) findViewById(R.id.ders5Ortalama);
    //
    final EditText ders6Vize = (EditText) findViewById(R.id.ders6Vize);
    final EditText ders6Final = (EditText) findViewById(R.id.ders6Final);
    final EditText ders6Ortalama = (EditText) findViewById(R.id.ders6Ortalama);
    //
    final EditText ders7Vize = (EditText) findViewById(R.id.ders7Vize);
    final EditText ders7Final = (EditText) findViewById(R.id.ders7Final);
    final EditText ders7Ortalama = (EditText) findViewById(R.id.ders7Ortalama);
    //

    /*
     * 
     * 
     * */

    kapatButon.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // kapatma islemi
            Toast.makeText(getApplicationContext(), "kapat",
                    Toast.LENGTH_LONG).show();
        }
    });
    /*
     * 
     * 
     * */
    hesaplaButon.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // hesap islemi

            int d1v = Integer.parseInt(ders1Vize.getText().toString());
            int d1f = Integer.parseInt(ders1Final.getText().toString());
            int ort1 = (int) (d1v * 0.4 + d1f * 0.6);
            ders1Ortalama.setText("" + ort1);
            //
            int d2v = Integer.parseInt(ders2Vize.getText().toString());
            int d2f = Integer.parseInt(ders2Final.getText().toString());
            int ort2 = (int) (d2v * 0.4 + d2f * 0.6);
            ders2Ortalama.setText("" + ort2);
            //
            int d3v = Integer.parseInt(ders3Vize.getText().toString());
            int d3f = Integer.parseInt(ders3Final.getText().toString());
            int ort3 = (int) (d3v * 0.4 + d3f * 0.6);
            ders3Ortalama.setText("" + ort3);
            //
            int d4v = Integer.parseInt(ders4Vize.getText().toString());
            int d4f = Integer.parseInt(ders4Final.getText().toString());
            int ort4 = (int) (d4v * 0.4 + d4f * 0.6);
            ders4Ortalama.setText("" + ort4);
            //
            int d5v = Integer.parseInt(ders5Vize.getText().toString());
            int d5f = Integer.parseInt(ders5Final.getText().toString());
            int ort5 = (int) (d5v * 0.4 + d5f * 0.6);
            ders5Ortalama.setText("" + ort5);
            //
            int d6v = Integer.parseInt(ders6Vize.getText().toString());
            int d6f = Integer.parseInt(ders6Final.getText().toString());
            int ort6 = (int) (d6v * 0.4 + d6f * 0.6);
            ders6Ortalama.setText("" + ort6);
            //
            int d7v = Integer.parseInt(ders7Vize.getText().toString());
            int d7f = Integer.parseInt(ders7Final.getText().toString());
            int ort7 = (int) (d7v * 0.4 + d7f * 0.6);
            ders7Ortalama.setText("" + ort7);
            //




            Toast.makeText(getApplicationContext(), "hesapla",
                    Toast.LENGTH_LONG).show();
        }
    });
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.