Очистити текст у EditText при введенні


92

Я намагаюся встановити та onclicklistener, щоб при натисканні на елемент edittext він очищав поточний вміст. Тут щось не так? Коли я компілюю цей код, я отримую примусовий вихід і ActivityManager: Не вдається відправити фрагмент DDM 4d505251: помилка, визначена обробником.

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. Це виклик функції за контекстом.
Якийсь студент Нуба

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

Ви не можете використовувати, findViewByIdдоки не зателефонуєте setContentView.
Тед Хопп,

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

2
Зверніть увагу, що ви можете встановити для "підказки" значення "an" EditText, яке змушує його відображати текст порожнім і яке зникає, коли користувач починає друкувати. Додайте android:hint="your hint text here"до свого EditTextв xml. "Підказка" зазвичай використовується, щоб вказати, для чого створений EditText. Можливо, це не те, що ви шукаєте, але я також прагнув очистити EditTextклік, поки не виявив, що "підказка" зробила те, що я насправді шукала.
Jecimi

Відповіді:


135

Спочатку потрібно викликати, 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("")). Чи є якісь відмінності? Коли слід використовувати який із них, чи вони повністю однакові? Дякую.
Олексій

editText.getText (). clear (); не працював для пана в android studio 3.5.1
Абдул Вахід

186

Також ви можете використовувати код нижче

editText.getText().clear();

Це чудово, якщо ви хочете зробити це програмно.
Джон Сміт

2
Алі, ти абсолютно правий. Але спочатку ми викликаємо метод getText (). Він повертає нам редагований екземпляр, який має метод clear ();
Сергій Надолинський 04.03.18

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

// Очистити при натисканні кнопки Clear

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

Це допоможе очистити неправильні ключові слова, які ви ввели, тому замість того, щоб натискати клавішу BackSpace знову і знову, ви можете просто натиснути кнопку, щоб очистити все. Це спрацювало для мене. Сподіваюся, це допоможе


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

встановивши Порожній рядок, ви можете очистити текст редагування

    editext.setText("");

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

EditText:

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.