Effacer le texte dans EditText une fois entré

92

J'essaye de définir et onclicklistener de sorte que lorsque je clique dans l'élément edittext, il efface son contenu actuel. Y a-t-il quelque chose qui ne va pas ici? Lorsque je compile ce code, j'obtiens un arrêt forcé et ActivityManager: impossible de distribuer le bloc DDM 4d505251: aucune erreur définie par le gestionnaire.

public class Project extends Activity implements OnClickListener {
    /** Called when the activity is first created. */
    EditText editText = (EditText)findViewById(R.id.editText1);
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);


        editText.setOnClickListener(this);

        setContentView(R.layout.main);

    }

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        editText.setText("");
    }
}
Locoboy
la source
EditText editText = (EditText)findViewById(R.id.editText1);Cette ligne ici doit être placée dans la méthode onCreate. C'est un appel de fonction par le contexte.
Some Noob Student
1
Déplacer EditText editText = (EditText) findViewById (R.id.editText1); après setContentView (R.layout.main);
Diego Torres Milano
Vous ne pouvez pas utiliser findViewByIdavant d'avoir appelé setContentView.
Ted Hopp
2
Oui! vous devez d'abord appeler setContentView (id). Pour que le système puisse afficher le contenu de l'écran, vous indiquez ensuite le EditText qui existera probablement dans le contenu de votre écran. Sinon, il affichera une exception avec la boîte de dialogue Forcer la fermeture.
Adil Soomro
2
Notez que vous pouvez définir un "indice" sur an EditText, ce qui lui permet d'afficher un texte lorsqu'il est vide et qui disparaît lorsque l'utilisateur commence à taper. Ajoutez android:hint="your hint text here"à votre EditTextin xml. Un «indice» est généralement utilisé pour indiquer à quoi sert le EditText. Ce n'est peut-être pas ce que vous recherchez, mais je cherchais aussi à effacer EditTextle clic jusqu'à ce que je découvre que le "conseil" faisait ce que je cherchais vraiment.
Jecimi

Réponses:

135

Vous devez d'abord appeler setContentView(R.layout.main)puis toutes les autres initialisations.

Veuillez essayer ci-dessous Code.

public class Trackfolio extends Activity implements OnClickListener {
    /** Called when the activity is first created. */
    public EditText editText;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

        editText = (EditText) findViewById(R.id.editText1);
        editText.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        editText.getText().clear(); //or you can use editText.setText("");
    }
}
Chirag
la source
6
Salut, je sais que c'est une vieille réponse, mais vous êtes le seul à mentionner les deux options ( .clearou .setText("")). Y a-t-il des différences? Quand devrais-je utiliser lesquels ou sont-ils complètement identiques? Merci.
Alex
editText.getText (). clear (); n'a pas fonctionné pour mr dans le studio Android 3.5.1
Abdul Wahid
184

Vous pouvez également utiliser le code ci-dessous

editText.getText().clear();
Serhii Nadolynskyi
la source
C'est génial si vous souhaitez le faire par programme.
John Smith
2
Ali, vous avez absolument raison. Mais nous appelons d'abord la méthode getText (). Il nous renvoie une instance modifiable, qui a la méthode clear ();
Serhii Nadolynskyi
41

utilisez simplement l' android:hintattribut dans votre EditText. Ce texte apparaît lorsque la zone est vide et non focalisée, mais disparaît lors de la sélection de la zone EditText.

user2088464
la source
cela devrait être la réponse acceptée, +1 pour plus de simplicité.
John Smith
C'est la bonne réponse du point de vue du design! Merci
kyxap
10

Nous pouvons effacer les données EditText de deux manières

Le premier paramètre EditText est vide comme la ligne ci-dessous

editext.setText("");

Deuxième effacement des données EditText comme celle-ci

editText.getText().clear();

Je suggère la deuxième façon

Venki WAR
la source
7

Votre code doit être:

    public class Project extends Activity implements OnClickListener {
            /** Called when the activity is first created. */
            EditText editText;
            @Override
            public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);            

                setContentView(R.layout.main);
                editText = (EditText)findViewById(R.id.editText1);
                editText.setOnClickListener(this);            
            }

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub

                if(v == editText) {
                    editText.setText("");
                }
            }
        }
Anju
la source
4
public EditText editField;
public Button clear = null;
@Override
public void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
    setContentView(R.layout.text_layout);
   this. editField = (EditText)findViewById(R.id.userName);
this.clear = (Button) findViewById(R.id.clear_button);  
this.editField.setOnClickListener(this);
this.clear.setOnClickListener(this);
@Override
public void onClick(View v) {

    // TODO Auto-generated method stub
if(v.getId()==R.id.clear_button){
//setText will remove all text that is written by someone
    editField.setText("");
    }
}
Faakhir
la source
4

Très simple à effacer les valeurs editText.Lorsque vous cliquez sur le bouton, suivez uniquement le code d'une ligne.

Bouton intérieur ou partout où vous le souhaitez.

editText.setText("");   
Gourou
la source
3
package com.example.sampleproject;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;

public class SampleProject extends Activity {
    EditText mSearchpeople;
    Button mCancel , msearchclose;
    ImageView mprofile, mContact, mcalender, mConnection, mGroup , mFollowup , msetting , mAddacard;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.dashboard);
        mSearchpeople = (EditText)findViewById(R.id.editText1);
        mCancel = (Button)findViewById(R.id.button2);
        msearchclose = (Button)findViewById(R.id.button1);
        mprofile = (ImageView)findViewById(R.id.imageView1);
        mContact = (ImageView)findViewById(R.id.imageView2);
        mcalender = (ImageView)findViewById(R.id.imageView3);
        mConnection = (ImageView)findViewById(R.id.imageView4);
        mGroup = (ImageView)findViewById(R.id.imageView5);
        mFollowup = (ImageView)findViewById(R.id.imageView6);
        msetting = (ImageView)findViewById(R.id.imageView7);
        mAddacard = (ImageView)findViewById(R.id.imageView8);
    }
    @Override
    protected void onResume() {
        // TODO Auto-generated method stub
        super.onResume();
        mCancel.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                mSearchpeople.clearFocus();

            }
        });
    }


}
Madhu
la source
Ne pas publier tout votre code plz fournir la solution nécessaire pour les aider à comprendre facilement
Digvesh Patel
3

Je ne sais pas quelles erreurs j'ai commises lors de la mise en œuvre des solutions ci-dessus, mais elles ont échoué pour moi

txtDeck.setOnFocusChangeListener(new OnFocusChangeListener() {
    @Override       
    public void onFocusChange(View v, boolean hasFocus) {
        txtDeck.setText("");
    }
});

Cela fonctionne pour moi,

marin
la source
2

// Pour effacer lorsque vous cliquez sur le bouton Effacer

firstName = (EditText) findViewById (R.id.firstName);

    clear = (Button) findViewById(R.id.clearsearchSubmit);

    clear.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            if (v.getId() == R.id.clearsearchSubmit);
            firstName.setText("");
        }
    });

Cela aidera à effacer les mauvais mots clés que vous avez tapés, donc au lieu d'appuyer encore et encore sur la touche de retour arrière, vous pouvez simplement cliquer sur le bouton pour tout effacer. J'espère que ça aide

ashim888
la source
1
final EditText childItem = (EditText) convertView.findViewById(R.id.child_item);
childItem.setHint(cellData);

childItem.setOnFocusChangeListener(new View.OnFocusChangeListener() {
    @Override
    public void onFocusChange(View v, boolean hasFocus) {
        //Log.d("NNN", "Has focus " + hasFocus);
        if (hasFocus) {
            Toast.makeText(ctx.getApplicationContext(), "got the focus", Toast.LENGTH_LONG).show();
        } else {
            Toast.makeText(ctx.getApplicationContext(),
            "loss the focus", Toast.LENGTH_SHORT).show();
        }
        return;
    });
Nikhil
la source
1

en définissant Chaîne vide, vous pouvez effacer votre edittext

    editext.setText("");
Sai Gopi moi
la source
1

En XML, vous pouvez écrire comme:

    <EditText
        android:id="@+id/txtsearch"
        android:layout_width="250dp"
        android:layout_height="match_parent"
        android:layout_gravity="right"
        android:layout_weight="1"
        android:background="@drawable/roundlayoutbutton1"
        android:ems="10"
        android:gravity="center"
        android:inputType="text"
        android:textAllCaps="true"
        android:text="search_xxxx"

        android:textColor="@color/colorPrimaryDark"
        android:visibility="visible" />

et dans la classe java, vous pouvez avoir en dessous de un:

    EditText searchHost;

OnCreate () vous écrivez:

    searchHost=findViewById(R.id.txtsearch);

    searchHost.setOnFocusChangeListener(new View.OnFocusChangeListener() {
        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            if(searchHost.getText().toString().equalsIgnoreCase("search_xxxx")){
                searchHost.setText("");
                Toast.makeText(getApplicationContext(),"Enter you text xxx...", Toast.LENGTH_LONG).show();
            }
        }
    });

Ça fonctionne bien pour moi.

Ashok
la source
1

Pour Kotlin:

Créez deux extensions, une pour EditText et une pour TextView

Éditer le texte:

fun EditText.clear() { text.clear() }

Affichage:

fun TextView.clear() { text = "" }

et utilisez-le comme

myEditText.clear()

myTextView.clear()
MaK
la source
0

Vous pouvez utiliser l'attribut 'android: hint' dans votre EditText également à partir du code:

editText.setHint(CharSequence hint / int resid);

Ensuite, vous n'avez besoin d'aucun onClickListener ou similaire. Mais considérez que la valeur d'indication ne sera pas transmise. Le editText restera vide. Dans ce cas, vous pouvez définir votre editText avec votre valeur par défaut:

if(editText.getText().toString().equals("")) { 
...use your default value instead of the editText... }
John
la source
0
my button

 <Button
    android:id="@+id/clear_button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginBottom="8dp"
    android:layout_marginEnd="8dp"
    android:layout_marginRight="8dp"
    android:text="@string/title_clear"
    android:onClick="clearLog"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintRight_toRightOf="parent" />

ma fonction

    public void clearLog(View view) {
      mLog.setText("");
      mLog.clearComposingText();
    }
  }
José Antonio
la source
0

Si l'utilisation de EditText n'est pas obligatoire, vous pouvez facilement implémenter ce comportement avec les nouveaux composants de matériau:

<com.google.android.material.textfield.TextInputLayout
            style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox.Dense"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="@string/hint_field"
            app:endIconDrawable="@drawable/ic_close_black_24dp"
            app:endIconMode="clear_text"
            app:endIconTint="@color/black">

            <com.google.android.material.textfield.TextInputEditText
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="@string/hint_value"
                android:maxLines="1"
                android:text="@{itemModel.value}" />

        </com.google.android.material.textfield.TextInputLayout>

Il vous suffit de spécifier le dessin de votre choix pour le bouton qui effacera le texte et l'action qu'il exécutera. Pour effacer le texte, vous pouvez utiliser iconMode = "clear_text", mais "password_toggle" est également disponible.

Jesús Barrera
la source
0

Il est simple: déclarer les variables widget ( editText, textView, buttonetc.) en classe , mais dans initialize onCreateaprès setContentView.

Le problème est que lorsque vous essayez d'accéder à un widget d'une mise en page, vous devez d'abord déclarer la mise en page. La déclaration de la mise en page est setContentView. Et lorsque vous initialisez la variable widget via findViewByIdvous accédez idau widget dans la mise en page principale dans le setContentView.

J'espère que vous l'avez!

Sacha
la source
-1

Je ne sais pas si vous recherchez celui-ci

    {
    <EditText
     .
     . 
     android:hint="Please enter your name here">
    }
Mohamed Sajjadh
la source