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("");
    }
}
locoboy
źródło
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("");
    }
}
Chirag
źródło
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();
Serhii Nadolynskyi
źródło
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.

user2088464
źródło
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

Venki WAR
źródło
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("");
                }
            }
        }
Anju
źródło
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
źródło
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("");   
Guru
źródło
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
źródło
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,

marynarz
źródło
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

ashim888
źródło
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
źródło
1

ustawiając pusty ciąg, możesz wyczyścić edittext

    editext.setText("");
Sai Gopi Me
źródło
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.

Ashok
źródło
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()
MaK
źródło
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... }
Jan
źródło
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".

Jesús Barrera
źródło
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!

Sacha
źródło
-1

Nie jestem pewien, czy szukasz tego

    {
    <EditText
     .
     . 
     android:hint="Please enter your name here">
    }
Mohamed Sajjadh
źródło