Borrar texto en EditText cuando se ingresa

94

Estoy tratando de configurar y onclicklistener para que cuando haga clic dentro del elemento edittext borre su contenido actual. hay algo mal aqui? Cuando compilo este código, obtengo un cierre forzado y ActivityManager: No se puede enviar el fragmento DDM 4d505251: no hay un error definido por el controlador.

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
fuente
EditText editText = (EditText)findViewById(R.id.editText1);Esta línea aquí debe colocarse dentro del método onCreate. Es una llamada de función por el contexto.
Some Noob Student
1
Mover EditText editText = (EditText) findViewById (R.id.editText1); después de setContentView (R.layout.main);
Diego Torres Milano
No puede usar findViewByIdhasta después de haber llamado setContentView.
Ted Hopp
2
¡Sí! primero tienes que llamar a setContentView (id). Para que el sistema pueda mostrar el contenido de la pantalla, y luego señalar el EditText que probablemente existirá en el contenido de su pantalla. De lo contrario, mostrará una excepción con el cuadro de diálogo Forzar cierre.
Adil Soomro
2
Observe que puede establecer una "sugerencia" en an EditText, lo que hace que muestre un texto cuando esté vacío y que desaparezca cuando el usuario comience a escribir. Agregue android:hint="your hint text here"a su EditTexten xml. Por lo general, se usa una 'sugerencia' para indicar para qué está hecho EditText. Tal vez no sea lo que estás buscando, pero también estaba buscando borrar el EditTextclic hasta que descubrí que la "pista" hizo lo que realmente estaba buscando.
Jecimi

Respuestas:

136

Primero debe llamar y setContentView(R.layout.main)luego todas las demás inicializaciones.

Pruebe el siguiente código.

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
fuente
6
Hola, sé que esta es una respuesta antigua, pero eres el único que menciona ambas opciones ( .clearo .setText("")). ¿Hay alguna diferencia? ¿Cuándo debo usar cuál o son completamente iguales? Gracias.
Alex
editText.getText (). clear (); no funcionó para mr en Android Studio 3.5.1
Abdul Wahid
188

También puede usar el código a continuación

editText.getText().clear();
Serhii Nadolynskyi
fuente
Esto es genial si desea hacerlo programáticamente.
John Smith
2
Ali, tienes toda la razón. Pero llamamos al método getText () primero. Nos devuelve una instancia editable, que tiene el método clear ();
Serhii Nadolynskyi
42

simplemente use el android:hintatributo en su EditText. Este texto aparece cuando el cuadro está vacío y no enfocado, pero desaparece al seleccionar el cuadro Editar texto.

usuario2088464
fuente
esta debería ser la respuesta aceptada, +1 por simplicidad.
John Smith
¡Esta es la respuesta correcta desde la perspectiva del diseño! Gracias
kyxap
11

Podemos borrar los datos de EditText de dos formas

La primera configuración EditText está vacía como la línea de abajo

editext.setText("");

En segundo lugar, borrando datos de EditText como este

editText.getText().clear();

Sugiero una segunda forma

Venki WAR
fuente
7

Tu código debe ser:

    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
fuente
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("");
    }
}
Faajir
fuente
4

Muy simple para borrar los valores de editText. Cuando haga clic en el botón, solo siga el código de 1 línea.

Botón interior o en cualquier lugar que desee. Utilice únicamente este

editText.setText("");   
Gurú
fuente
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
fuente
No publicar su código entero PLZ proporcionar la solución necesaria para su op ayuda a comprender fácilmente
Digvesh Patel
3

No sé qué errores cometí al implementar las soluciones anteriores, pero no tuvieron éxito para mí

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

Esto funciona para mi

marinero
fuente
2

// Para borrar cuando se hace clic en el botón Borrar

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

Esto ayudará a borrar las palabras clave incorrectas que ha escrito, por lo que en lugar de presionar la tecla de retroceso una y otra vez, simplemente puede hacer clic en el botón para borrar todo. Espero eso ayude

ashim888
fuente
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
fuente
1

al configurar Cadena vacía puede borrar su texto de edición

    editext.setText("");
Sai Gopi Me
fuente
1

En XML puedes escribir como:

    <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" />

y en la clase java puede tener uno debajo:

    EditText searchHost;

OnCreate () escribe:

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

Funciona bien para mí.

Ashok
fuente
1

Para Kotlin:

Cree dos extensiones, una para EditText y otra para TextView

Editar texto:

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

Vista de texto:

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

y úsalo como

myEditText.clear()

myTextView.clear()
MaK
fuente
0

Puede usar el atributo 'android: hint' en su EditText también desde el código:

editText.setHint(CharSequence hint / int resid);

Entonces no necesita ningún onClickListener o similar. Pero tenga en cuenta que el valor de la pista no se pasará. El editText permanecerá vacío. En este caso, puede configurar su editText con su valor deflault:

if(editText.getText().toString().equals("")) { 
...use your default value instead of the editText... }
Juan
fuente
0

Si el uso de EditText no es obligatorio, puede implementar este comportamiento fácilmente con los nuevos componentes de material:

<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>

Solo tienes que especificar el dibujable que deseas para el botón que borrará el texto y la acción que ejecutará. Para borrar el texto, puede usar iconMode = "clear_text", pero también está disponible "password_toggle".

Jesús Barrera
fuente
0

Es muy sencillo: declarar las variables de widgets ( editText, textView, buttonetc.) en la clase, pero inicializar en onCreatedespués setContentView.

El problema es que cuando intenta acceder a un widget de un diseño, primero debe declarar el diseño. Declarar el diseño es setContentView. Y cuando inicializa la variable del widget a través de findViewById, está accediendo al iddel widget en el diseño principal en setContentView.

¡Espero que lo obtengas!

Sacha
fuente
-1

No estoy seguro de si estás buscando este

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