ล้างข้อความใน EditText เมื่อป้อน


94

ฉันกำลังพยายามตั้งค่าและ onclicklistener ดังนั้นเมื่อฉันคลิกภายในองค์ประกอบแก้ไขข้อความจะล้างเนื้อหาปัจจุบัน มีบางอย่างผิดปกติที่นี่? เมื่อฉันรวบรวมรหัสนี้ฉันได้รับการบังคับให้ออกและ ActivityManager: ไม่สามารถส่ง DDM chunk 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 เป็นการเรียกใช้ฟังก์ชันตามบริบท
นักเรียน Noob บางคน

1
ย้าย EditText editText = (EditText) findViewById (R.id.editText1); หลังจาก setContentView (R.layout.main);
Diego Torres Milano

คุณไม่สามารถใช้งานได้findViewByIdจนกว่าคุณจะโทรsetContentViewไป
Ted Hopp

2
อ๋อ! คุณต้องเรียก setContentView (id) ก่อน เพื่อให้ระบบสามารถแสดงเนื้อหาบนหน้าจอจากนั้นคุณจะชี้ให้เห็น EditText ซึ่งอาจมีอยู่ในเนื้อหาหน้าจอของคุณ มิฉะนั้นจะแสดงข้อยกเว้นพร้อมกล่องโต้ตอบบังคับปิด
Adil Soomro

2
โปรดสังเกตว่าคุณสามารถตั้งค่า "คำใบ้" เป็นEditTextซึ่งจะทำให้ข้อความแสดงเมื่อว่างเปล่าและจะหายไปเมื่อผู้ใช้เริ่มพิมพ์ เพิ่มandroid:hint="your hint text here"ที่คุณEditTextXML ใน 'คำใบ้' มักใช้เพื่อระบุว่า EditText สร้างขึ้นเพื่ออะไร มันอาจจะไม่ใช่สิ่งที่คุณกำลังมองหา แต่ฉันก็ต้องการล้างEditTextเมื่อคลิกจนกว่าฉันจะพบว่า "คำใบ้" นั้นทำในสิ่งที่ฉันต้องการ
Jecimi

คำตอบ:


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 (); ไม่ได้ทำงานให้กับ mr ใน android studio 3.5.1
Abdul Wahid

188

คุณสามารถใช้รหัสด้านล่าง

editText.getText().clear();

วิธีนี้ดีมากหากคุณต้องการทำแบบเป็นโปรแกรม
John Smith

2
อาลีคุณพูดถูกจริงๆ แต่เราเรียก method getText () ก่อน มันส่งคืนอินสแตนซ์ที่แก้ไขให้เราซึ่งมี method clear ();
Serhii Nadolynskyi

42

เพียงใช้android:hintแอตทริบิวต์ใน EditText ของคุณ ข้อความนี้จะปรากฏขึ้นเมื่อกล่องว่างเปล่าและไม่ได้โฟกัส แต่จะหายไปเมื่อเลือกกล่องแก้ไขข้อความ


นี่ควรเป็นคำตอบที่ได้รับการยอมรับ +1 เพื่อความเรียบง่าย
John Smith

นี่คือคำตอบที่ถูกต้องจากมุมมองของการออกแบบ! ขอบคุณ
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();

            }
        });
    }


}

อย่าโพสต์รหัสทั้งหมดของคุณโปรดให้วิธีแก้ปัญหาที่จำเป็นเพื่อช่วยให้พวกเขาเข้าใจได้ง่าย
Digvesh Patel

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

วิธีนี้จะช่วยล้างคำหลักที่ไม่ถูกต้องที่คุณพิมพ์ดังนั้นแทนที่จะกด 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

สำหรับ Kotlin:

สร้างสองส่วนขยายส่วนขยายสำหรับ 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ฯลฯ ) ในชั้นเรียน แต่เริ่มต้นในหลังจากonCreatesetContentView

ปัญหาคือเมื่อคุณพยายามเข้าถึงวิดเจ็ตของเค้าโครงก่อนอื่นคุณต้องประกาศเค้าโครง setContentViewประกาศรูปแบบคือ และเมื่อคุณเตรียมใช้งานตัวแปรวิดเจ็ตผ่านfindViewByIdคุณกำลังเข้าถึงidวิดเจ็ตในเค้าโครงหลักในไฟล์setContentView.

ฉันหวังว่าคุณจะได้รับมัน!


-1

ฉันไม่แน่ใจว่าคุณกำลังค้นหาสิ่งนี้อยู่หรือเปล่า

    {
    <EditText
     .
     . 
     android:hint="Please enter your name here">
    }
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.