Limpar o texto em EditText quando inserido

92

Estou tentando definir e onclicklistener de modo que, quando eu clicar no elemento edittext, ele limpará seu conteúdo atual. Há algo de errado aqui? Quando compilo este código, obtenho um encerramento forçado e ActivityManager: Não é possível despachar o bloco DDM 4d505251: nenhum erro definido pelo manipulador.

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
fonte
EditText editText = (EditText)findViewById(R.id.editText1);Esta linha aqui deve ser colocada dentro do método onCreate. É uma chamada de função pelo contexto.
Algum estudante Noob de
1
Mover EditText editText = (EditText) findViewById (R.id.editText1); após setContentView (R.layout.main);
Diego Torres Milano,
Você não pode usar findViewByIdaté depois de ligar setContentView.
Ted Hopp de
2
Sim! você deve chamar setContentView (id) primeiro. Para que o sistema possa exibir o conteúdo da tela, e então você aponta o EditText que provavelmente existirá no conteúdo da sua tela. Caso contrário, ele mostrará uma exceção com a caixa de diálogo Forçar fechamento.
Adil Soomro,
2
Observe que você pode definir uma "dica" para um EditText, o que o faz exibir um texto quando vazio e que desaparece quando o usuário começa a digitar. Adicione android:hint="your hint text here"ao seu EditTextem xml. Uma 'dica' geralmente é usada para indicar para que o EditText é feito. Talvez não seja o que você está procurando, mas eu também estava tentando limpar o EditTextclique até descobrir que a "dica" fazia o que eu realmente procurava.
Jecimi

Respostas:

135

Primeiro você precisa ligar setContentView(R.layout.main) seguida, todas as outras inicializações.

Por favor, tente o código abaixo.

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
fonte
6
Olá, eu sei que esta é uma resposta antiga, mas você é o único que menciona as duas opções ( .clearou .setText("")). Existem diferenças? Quando devo usar qual deles ou eles são completamente iguais? Obrigado.
Alex de
editText.getText (). clear (); nt funcionou para mr no android studio 3.5.1
Abdul Wahid
184

Você também pode usar o código abaixo

editText.getText().clear();
Serhii Nadolynskyi
fonte
Isso é ótimo se você deseja fazer isso de forma programática.
John Smith de
2
Ali, você está absolutamente certo. Mas chamamos o método getText () primeiro. Ele retorna a instância Editable, que tem o método clear ();
Serhii Nadolynskyi
41

apenas use o android:hintatributo em seu EditText. Este texto aparece quando a caixa está vazia e sem foco, mas desaparece ao selecionar a caixa Editar Texto.

user2088464
fonte
esta deve ser a resposta aceita, +1 para simplificar.
John Smith de
Esta é a resposta correta do ponto de vista do design! Obrigado
kyxap
10

Podemos limpar os dados EditText de duas maneiras

A configuração do primeiro EditText está vazia como a linha abaixo

editext.setText("");

O segundo apagando dados de EditText como este

editText.getText().clear();

Eu sugiro uma segunda maneira

Venki WAR
fonte
7

Seu código deve 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
fonte
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
fonte
4

Muito simples de limpar os valores editText. Quando você clica no botão, segue apenas o código de 1 linha.

Botão interno ou em qualquer lugar que você quiser. Use apenas este

editText.setText("");   
Guru
fonte
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
fonte
Não postar seu código inteiro, por favor, forneça a solução necessária para ajudá-los a entender facilmente
Digvesh Patel
3

eu não sei quais erros cometi ao implementar as soluções acima, mas eles não tiveram sucesso para mim

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

Isso funciona para mim,

marinheiro
fonte
2

// Para limpar quando o botão Clear é clicado

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

Isso ajudará a limpar as palavras-chave erradas que você digitou, então, em vez de pressionar backspace novamente e novamente, você pode simplesmente clicar no botão para limpar tudo. Funcionou para mim. Espero que ajude

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

configurando String vazia, você pode limpar o seu texto de edição

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

Em XML, você pode escrever 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" />

e na classe java você pode ter abaixo de um:

    EditText searchHost;

OnCreate () você escreve:

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

Isso funciona bem para mim.

Ashok
fonte
1

Para Kotlin:

Crie duas extensões, uma para EditText e outra para TextView

Editar texto:

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

TextView:

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

e usar como

myEditText.clear()

myTextView.clear()
MaK
fonte
0

Você pode usar o atributo 'android: hint' em seu EditText também a partir do código:

editText.setHint(CharSequence hint / int resid);

Então você não precisa de nenhum onClickListener ou similar. Mas considere que o valor da dica não será passado. O editText permanecerá vazio. Neste caso, você pode definir seu editText com seu valor padrão:

if(editText.getText().toString().equals("")) { 
...use your default value instead of the editText... }
John
fonte
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" />

minha função

    public void clearLog(View view) {
      mLog.setText("");
      mLog.clearComposingText();
    }
  }
Jose Antonio
fonte
0

Se o uso de EditText não for obrigatório, você pode implementar esse comportamento facilmente com os novos 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>

Você só precisa especificar o drawable que deseja para o botão que limpará o texto e a ação que executará. Para limpar o texto, você pode usar iconMode = "clear_text", mas também "password_toggle" está disponível.

Jesús Barrera
fonte
0

É simples: declarar as variáveis widget ( editText, textView, buttonetc.) em sala de aula, mas inicialize-o em onCreatedepoissetContentView .

O problema é que quando você tenta acessar um widget de um layout, primeiro você precisa declarar o layout. Declarar o layout é setContentView. E quando você inicializa a variável do widget via, findViewByIdvocê está acessando o iddo widget no layout principal nosetContentView .

Espero que consiga!

Sacha
fonte
-1

Não tenho certeza se você está procurando por este

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