Obtenir la valeur d'un champ d'édition de texte


439

J'apprends à créer des éléments d'interface utilisateur. J'ai créé quelques champs de saisie EditText. Sur le clic d'un bouton, je veux capturer le contenu saisi dans ce champ de saisie.

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

C'est mon domaine. Comment puis-je obtenir le contenu?


21
La quantité de votes positifs prouve quelque peu que la substitution toStringne donne pas l'API la plus détectable, mais la technique est fantaisiste.
vemv

29
La grammaire et le sentiment dans votre commentaire sont vraiment difficiles à comprendre ...
IcedDante

7
@vemv Le problème avec l'API renvoie un Editableobjet où les utilisateurs attendent et ont besoin d'un simple String99% de fois.
Amir Ali Akbari

Je pense qu'Android est cool, mais je suis surpris d'avoir dû Google pour cela (et pour savoir comment détecter lorsque la valeur a changé et est prête à être lue, ce qui peut être compliqué). Je pense qu'ils ont rendu cela plus difficile que nécessaire!
nsandersen

Réponses:


686

En utilisant 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
Si vous ne placez pas EditText dans la portée à l'échelle du clas et que vous le déclarez à la place dans OnCreate, il souhaite qu'il soit déclaré final. Je suppose qu'il vaut mieux ne pas le rendre définitif, mais est-ce la seule façon de le faire, de le faire à l'échelle de la classe? Est-ce que c'est à l'échelle de la classe la meilleure façon de procéder?
PFranchise

1
@PFranchise Qu'entendez-vous par "à l'échelle de la classe"? Paquet protégé (comme dans l'exemple)? Privé? Pourquoi ne voudriez-vous pas qu'un widget soit accessible dans toute la classe?
Zelphir Kaltstahl du

3
<rant> Pas une demande d'informations ou de suggestions. Pas non plus un remerciement ou +1. C'EST TERRIBLE! Pourquoi est-ce que quelqu'un penserait que c'est la bonne façon de concevoir une zone de texte. De plus, EditText est le nom le moins intuitif qu'ils ont pu trouver. </rant>
Roy Falk

22

Je suppose que vous devrez utiliser ce code lors de l'appel du "mEdit" votre objet EditText:

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

Assurez-vous simplement que le compilateur sait lequel EditTextappeler et utiliser.


7
vous devez ajouter une explication d'où vient le "mEdit".
null

18

Obtenez la valeur d'un EditTextcontrôle dans Android. EditText getTextutilisation de la propriété pour obtenir une valeur EditText:

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

11

J'espère que celui-ci devrait fonctionner:

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

J'ai essayé la Integer.getInteger()méthode au lieu de valueOf()- cela n'a pas fonctionné.


9
Cela suppose que la valeur est un entier ... Je ne sais pas où vous avez récupéré cela dans la question.
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

Vous voudrez peut-être aussi jeter un œil au couteau à beurre . Il vise à réduire la quantité de code passe-partout en utilisant l'annotation. Voici un exemple simple:

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();
    }
}

Ajoutez simplement la dépendance suivante à votre build.gradle:

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

Comme alternative, il existe également AndroidAnnotations .


5

Le plus court et le plus simple

getText(editText);

getText(button);

getText(textView);

Petite solution de contournement

Créez simplement la méthode dans votre BaseActivity / créez BaseActivity si vous n'en avez pas.

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

Et étendez toutes vos activités grâce à cette BaseActivity.

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

Notez que EditText, Buttons'étend TextView, donc j'ai créé seulement getText(TextView tv).


2

Une manière plus avancée serait d'utiliser bindknife butterknife. Cela élimine le code redondant.

Dans votre gradle sous dépendances; ajoutez ces 2 lignes.

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

Synchronisez ensuite. Exemple de liaison d'edittext dans MainActivity

import butterknife.BindView;   
import butterknife.ButterKnife; 

public class MainActivity {

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

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

}

Mais c'est une alternative une fois que vous vous sentez plus à l'aise ou commencez à travailler avec beaucoup de données.


1

étape 1: créer une mise en page avec le nom 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>

Étape 2: créer la classe 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

Valeur de chaîne = YourEditText.getText (). ToString;


En quoi cette réponse diffère-t-elle des réponses déjà existantes?
Matt Ke

0

Essayez ce 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();
        }
    });
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.