Очистить текст в EditText при вводе


94

Я пытаюсь установить и onclicklistener, чтобы при щелчке внутри элемента edittext он очищал его текущее содержимое. Здесь что-то не так? Когда я компилирую этот код, я получаю принудительный выход и ActivityManager: Can't dispatch DDM chunk 4d505251: no handler defined error.

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

EditText editText = (EditText)findViewById(R.id.editText1);Эта строка здесь должна быть помещена внутри метода onCreate. Это вызов функции из контекста.
Some Noob Student

1
Переместить EditText editText = (EditText) findViewById (R.id.editText1); после setContentView (R.layout.main);
Диего Торрес Милано

Вы не можете использовать, findViewByIdпока не позвоните setContentView.
Тед Хопп,

2
Ага! сначала вам нужно вызвать setContentView (id). Чтобы система могла отображать содержимое экрана, а затем вы указываете EditText, который, вероятно, будет существовать в содержимом вашего экрана. В противном случае будет показано исключение с диалоговым окном принудительного закрытия.
Адиль Соомро

2
Обратите внимание, что вы можете установить «подсказку» EditText, которая заставляет отображать текст, когда он пуст, и который исчезает, когда пользователь начинает печатать. Добавьте android:hint="your hint text here"в свой EditTextв xml. «Подсказка» обычно используется, чтобы указать, для чего создан EditText. Возможно, это не то, что вы ищете, но я также хотел убрать EditTextщелчок, пока не обнаружил, что «подсказка» сделала то, что я действительно искал.
Jecimi 05

Ответы:


136

Для начала нужно позвонить setContentView(R.layout.main) затем все остальные инициализации.

Пожалуйста, попробуйте ниже Код.

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

6
Привет, я знаю, что это старый ответ, но вы единственный, в котором упоминаются оба варианта ( .clearили .setText("")). Есть ли отличия? Когда я должен использовать какой из них или они полностью идентичны? Спасибо.
Alex

editText.getText (). clear (); не работал для мистера в студии Android 3.5.1
Абдул Вахид

188

Также вы можете использовать код ниже

editText.getText().clear();

Это замечательно, если вы хотите делать это программно.
Джон Смит

2
Али, ты абсолютно прав. Но сначала мы вызываем метод getText (). Он возвращает нам экземпляр Editable, у которого есть метод clear ();
Сергей Надолинский 04

42

просто используйте android:hintатрибут в своем EditText. Этот текст отображается, когда поле пусто и не сфокусировано, но исчезает при выборе поля EditText.


это должен быть принятый ответ, +1 для простоты.
Джон Смит

Это правильный ответ с точки зрения дизайна! Спасибо
kyxap

11

Мы можем очистить данные EditText двумя способами

Первый параметр EditText пуст, как и строка ниже

editext.setText("");

Второй очищает данные EditText, подобные этому

editText.getText().clear();

Я предлагаю второй способ


7

Ваш код должен быть:

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

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

4

Очень просто очистить значения editText. Когда вы нажимаете кнопку, следуйте только 1 строчному коду.

Внутри кнопки или где угодно. Используйте только эту

editText.setText("");   

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

            }
        });
    }


}

Не публиковать весь код, пожалуйста, предоставьте необходимое решение, чтобы помочь им легко понять
Дигвеш Патель

3

я не знаю, какие ошибки я сделал при реализации вышеуказанных решений, но они не увенчались успехом для меня

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

Это работает для меня,


2

// Очистить при нажатии кнопки Очистить

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

Это поможет удалить неправильные ключевые слова, которые вы ввели, поэтому вместо того, чтобы снова и снова нажимать клавишу возврата, вы можете просто щелкнуть кнопку, чтобы очистить все. Это сработало для меня. Надеюсь, это поможет


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


1

В XML вы можете написать так:

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

и в классе java у вас может быть ниже одного:

    EditText searchHost;

OnCreate () вы пишете:

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

Он отлично работает для меня.


1

Для Котлина:

Создайте два расширения, одно для EditText и одно для TextView.

Редактировать текст:

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

TextView:

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

и используйте это как

myEditText.clear()

myTextView.clear()

0

Вы также можете использовать атрибут android: hint в своем EditText из кода:

editText.setHint(CharSequence hint / int resid);

Тогда вам не нужен onClickListener или аналогичный. Но учтите, что значение подсказки не будет передано. EditText останется пустым. В этом случае вы можете установить для editText значение по умолчанию:

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

0

Если использование EditText не является обязательным, вы можете легко реализовать это поведение с новыми компонентами материала:

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

Вам нужно только указать рисование, которое вы хотите для кнопки, которая очистит текст, и действие, которое она будет выполнять. Чтобы очистить текст, вы можете использовать iconMode = "clear_text", но также доступен "password_toggle".


0

Это просто: объявите переменные виджета ( editText, textViewи buttonт. Д.) В классе, но инициализируйте его onCreateпозже setContentView.

Проблема в том, что когда вы пытаетесь сначала получить доступ к виджету макета, вам нужно объявить макет. Объявление макета есть setContentView. И когда вы инициализируете переменную виджета через, findViewByIdвы получаете доступ idк виджету в основном макете в setContentView.

Надеюсь, ты понял!


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.