Klartext in EditText bei Eingabe

91

Ich versuche, Listener so einzustellen und anzuklicken, dass beim Klicken in das edittext-Element der aktuelle Inhalt gelöscht wird. Stimmt hier etwas nicht? Wenn ich diesen Code kompiliere, wird ein Force-Beenden und ActivityManager: DDM-Block 4d505251 kann nicht versendet werden: Kein vom Handler definierter Fehler.

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
quelle
EditText editText = (EditText)findViewById(R.id.editText1);Diese Zeile sollte hier in die onCreate-Methode eingefügt werden. Es ist ein Funktionsaufruf des Kontexts.
Einige Noob Student
1
Move EditText editText = (EditText) findViewById (R.id.editText1); nach setContentView (R.layout.main);
Diego Torres Milano
Sie können nicht verwenden, findViewByIdbis Sie angerufen haben setContentView.
Ted Hopp
2
Ja! Sie müssen zuerst setContentView (id) aufrufen. Damit das System den Bildschirminhalt anzeigen kann, weisen Sie auf den EditText hin, der wahrscheinlich in Ihrem Bildschirminhalt vorhanden sein wird. Andernfalls wird im Dialogfeld "Schließen erzwingen" eine Ausnahme angezeigt.
Adil Soomro
2
Beachten Sie, dass Sie einen "Hinweis" auf a setzen können EditText, wodurch ein Text angezeigt wird, wenn er leer ist, und der verschwindet, wenn der Benutzer mit der Eingabe beginnt. Fügen Sie android:hint="your hint text here"Ihrem EditTextin xml hinzu. Ein 'Hinweis' wird normalerweise verwendet, um anzugeben, wofür der EditText gemacht ist. Es ist vielleicht nicht das, wonach Sie suchen, aber ich habe auch versucht, den EditTextKlick zu löschen, bis ich herausfand, dass der "Hinweis" das tat, wonach ich wirklich suchte.
Jecimi

Antworten:

134

Zuerst müssen Sie setContentView(R.layout.main)alle anderen Initialisierungen aufrufen .

Bitte versuchen Sie es unter Code.

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
quelle
6
Hallo, ich weiß, dass dies eine alte Antwort ist, aber Sie sind die einzige, die beide Optionen ( .clearoder .setText("")) erwähnt. Gibt es Unterschiede? Wann sollte ich welche verwenden oder sind sie völlig gleich? Vielen Dank.
Alex
editText.getText (). clear (); hat nicht für mr in android studio 3.5.1 gearbeitet
Abdul Wahid
184

Sie können auch den folgenden Code verwenden

editText.getText().clear();
Serhii Nadolynskyi
quelle
Dies ist großartig, wenn Sie dies programmatisch tun möchten.
John Smith
2
Ali, du hast absolut recht. Aber wir rufen zuerst die Methode getText () auf. Es gibt uns eine bearbeitbare Instanz zurück, die die Methode clear () hat.
Serhii Nadolynskyi
41

Verwenden Sie einfach das android:hintAttribut in Ihrem EditText. Dieser Text wird angezeigt, wenn das Feld leer und nicht fokussiert ist, verschwindet jedoch bei Auswahl des Felds EditText.

user2088464
quelle
Dies sollte der Einfachheit halber die akzeptierte Antwort sein, +1.
John Smith
Dies ist die richtige Antwort aus gestalterischer Sicht! Danke
Kyxap
10

Wir können EditText-Daten auf zwei Arten löschen

Erste Eine Einstellung EditText ist wie in der folgenden Zeile leer

editext.setText("");

Zweitens löschen Sie EditText-Daten wie folgt

editText.getText().clear();

Ich schlage den zweiten Weg vor

Venki WAR
quelle
7

Ihr Code sollte sein:

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

Sehr einfach zu löschen editText-Werte. Wenn Sie auf die Schaltfläche klicken, folgen Sie nur 1 Zeilencode.

Innentaste oder wo immer Sie wollen. Verwenden Sie nur diese

editText.setText("");   
Guru
quelle
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
quelle
Nicht posten Sie Ihren gesamten Code plz bieten notwendige Lösung für op seine Hilfe ihnen leicht zu verstehen
Digvesh Patel
3

Ich weiß nicht, welche Fehler ich bei der Implementierung der oben genannten Lösungen gemacht habe, aber sie waren für mich erfolglos

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

Das funktioniert bei mir,

Matrose
quelle
2

// Zum Löschen, wenn auf die Schaltfläche Löschen geklickt wird

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

Dies hilft dabei, die falschen Schlüsselwörter zu löschen, die Sie eingegeben haben. Anstatt immer wieder die Rücktaste zu drücken, können Sie einfach auf die Schaltfläche klicken, um alles zu löschen. Es hat bei mir funktioniert. Ich hoffe es hilft

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

Durch Setzen von Leere Zeichenfolge können Sie Ihren Edittext löschen

    editext.setText("");
Sai Gopi ich
quelle
1

In XML können Sie wie folgt schreiben:

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

und in der Java-Klasse können Sie unter einem haben:

    EditText searchHost;

OnCreate () schreiben Sie:

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

Es funktioniert gut für mich.

Ashok
quelle
1

Für Kotlin:

Erstellen Sie zwei Erweiterungen, eine für EditText und eine für TextView

Text bearbeiten:

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

Textübersicht:

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

und benutze es gerne

myEditText.clear()

myTextView.clear()
MaK
quelle
0

Sie können das Attribut 'android: Hinweis' in Ihrem EditText auch aus Code verwenden:

editText.setHint(CharSequence hint / int resid);

Dann brauchen Sie keinen onClickListener oder ähnliches. Beachten Sie jedoch, dass der Hinweiswert nicht übergeben wird. Der editText bleibt leer. In diesem Fall können Sie Ihren editText mit Ihrem Standardwert festlegen:

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

meine Funktion

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

Wenn die Verwendung von EditText nicht obligatorisch ist, können Sie dieses Verhalten mit den neuen Materialkomponenten einfach implementieren:

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

Sie müssen nur das gewünschte Zeichen für die Schaltfläche angeben, mit der der Text und die auszuführende Aktion gelöscht werden. Um den Text zu löschen, können Sie iconMode = "clear_text" verwenden, aber auch "password_toggle" ist verfügbar.

Jesús Barrera
quelle
0

Es ist ganz einfach: erklären die Widget - Variablen ( editText, textView, buttonetc.) in der Klasse , aber initialisieren es in onCreatenach setContentView.

Das Problem ist, wenn Sie zuerst versuchen, auf ein Widget eines Layouts zuzugreifen, müssen Sie das Layout deklarieren. Das Layout zu deklarieren ist setContentView. Und wenn Sie die Widget-Variable über initialisieren, findViewByIdgreifen Sie auf iddas Widget im Hauptlayout im zusetContentView .

Ich hoffe du verstehst es!

Sacha
quelle
-1

Ich bin mir nicht sicher, ob Sie nach diesem suchen

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