Wyczyść tekst w EditText po wprowadzeniu


94

Próbuję ustawić i onclicklistener, aby po kliknięciu elementu edittext wyczyścił jego aktualną zawartość. Coś tu jest nie tak? Kiedy kompiluję ten kod, otrzymuję wymuszone zamknięcie i ActivityManager: Nie można wysłać fragmentu DDM 4d505251: brak zdefiniowanego błędu obsługi.

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);Ta linia powinna być umieszczona wewnątrz metody onCreate. Jest to wywołanie funkcji przez kontekst.
Jakiś student Noob

1
Przenieś EditText editText = (EditText) findViewById (R.id.editText1); po setContentView (R.layout.main);
Diego Torres Milano

Nie możesz używać, findViewByIddopóki nie zadzwonisz setContentView.
Ted Hopp,

2
Tak! musisz najpierw wywołać setContentView (id). Aby system mógł wyświetlić zawartość ekranu, a następnie wskazujesz tekst edycji, który prawdopodobnie będzie istniał w zawartości ekranu. W przeciwnym razie pokaże wyjątek z oknem dialogowym Wymuś zamknięcie.
Adil Soomro,

2
Zauważ, że możesz ustawić "wskazówkę" na an EditText, co powoduje, że wyświetla tekst, gdy jest pusty, i który znika, gdy użytkownik zaczyna pisać. Dodaj android:hint="your hint text here"do swojego EditTextw xml. „Podpowiedź” jest zwykle używana do wskazania, do czego służy EditText. Może nie jest to to, czego szukasz, ale chciałem też usunąć EditTextkliknięcie, dopóki nie odkryłem, że „wskazówka” zrobiła to, czego naprawdę szukałem.
Jecimi,

Odpowiedzi:


136

Najpierw musisz wywołać setContentView(R.layout.main)wszystkie inne inicjalizacje.

Spróbuj poniżej kodu.

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
Cześć, wiem, że to stara odpowiedź, ale jesteś jedyną osobą, która wspomina obie opcje ( .clearlub .setText("")). Czy są jakieś różnice? Kiedy należy użyć którego z nich, czy są one całkowicie takie same? Dzięki.
Alex

editText.getText (). clear (); nie działał dla pana w Android Studio 3.5.1
Abdul Wahid

187

Możesz również użyć kodu poniżej

editText.getText().clear();

To jest świetne, jeśli chcesz robić to programowo.
John Smith

2
Ali, masz całkowitą rację. Ale najpierw wywołujemy metodę getText (). Zwraca nam edytowalną instancję, która ma metodę clear ();
Serhii Nadolynskyi

42

po prostu użyj android:hintatrybutu w swoim EditText. Ten tekst pojawia się, gdy pole jest puste i nie jest zaznaczone, ale znika po wybraniu pola EditText.


powinna to być akceptowana odpowiedź, +1 za prostotę.
John Smith

To poprawna odpowiedź z punktu widzenia projektowania! Dzięki
kyxap

11

Możemy wyczyścić dane EditText na dwa sposoby

Pierwsze ustawienie EditText jest puste jak poniżej

editext.setText("");

Drugi czyści dane EditText w ten sposób

editText.getText().clear();

Proponuję drugi sposób


7

Twój kod powinien być:

    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

Bardzo proste, aby wyczyścić wartości editText. Po kliknięciu przycisku, a następnie wykonaj tylko 1 wiersz kodu.

Wewnątrz przycisku lub w dowolnym miejscu, używaj tylko tego

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

            }
        });
    }


}

Nie publikuj całego kodu. Plz zapewnia niezbędne rozwiązanie, aby ułatwić im zrozumienie
Digvesh Patel

3

nie wiem, jakie błędy popełniłem przy wdrażaniu powyższych rozwiązań, ale mi się nie udało

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

To działa dla mnie,


2

// Aby wyczyścić po kliknięciu przycisku Wyczyść

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

Pomoże to usunąć niewłaściwe słowa kluczowe, które wpisałeś, więc zamiast raz po raz naciskać klawisz Backspace, możesz po prostu kliknąć przycisk, aby wyczyścić wszystko. Mam nadzieję, że to pomoże


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

W XML możesz pisać tak:

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

aw klasie java możesz mieć poniżej jedną:

    EditText searchHost;

OnCreate () piszesz:

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

U mnie działa dobrze.


1

Kotlin:

Utwórz dwa rozszerzenia, jedno dla EditText i jedno dla TextView

Edytować tekst:

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

Widok tekstu:

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

i używaj go jak

myEditText.clear()

myTextView.clear()

0

Możesz użyć atrybutu „android: hint” w swoim EditText również z kodu:

editText.setHint(CharSequence hint / int resid);

Wtedy nie potrzebujesz żadnego onClickListener ani podobnego. Ale pamiętaj, że wartość podpowiedzi nie zostanie przekazana. EditText pozostanie pusty. W takim przypadku możesz ustawić swój editText za pomocą wartości deflault:

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

0

Jeśli użycie EditText nie jest obowiązkowe, możesz łatwo zaimplementować to zachowanie dzięki nowym komponentom materiału:

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

Musisz tylko określić, jaki element rysowania chcesz dla przycisku, który wyczyści tekst i akcję, którą wykona. Aby wyczyścić tekst, możesz użyć iconMode = "clear_text", ale dostępne jest również "password_toggle".


0

To proste: deklarować zmienne widgetów ( editText, textView, buttonitd) w klasie ale zainicjować to w onCreatepo setContentView.

Problem polega na tym, że kiedy próbujesz uzyskać dostęp do widżetu układu, musisz najpierw zadeklarować układ. Deklarowanie układu to setContentView. A kiedy zainicjujesz zmienną widgetu za pośrednictwem findViewById, uzyskujesz dostęp iddo widgetu w głównym układzie wsetContentView .

Mam nadzieję, że to rozumiesz!


-1

Nie jestem pewien, czy szukasz tego

    {
    <EditText
     .
     . 
     android:hint="Please enter your name here">
    }
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.