Xóa văn bản trong EditText khi nhập


93

Tôi đang cố gắng thiết lập và onclicklistener để khi tôi nhấp vào trong phần tử edittext, nó sẽ xóa nội dung hiện tại của nó. Có điều gì đó không ổn ở đây? Khi tôi biên dịch mã này, tôi nhận được một buộc thoát và ActivityManager: Không thể gửi DDM chunk 4d505251: không có lỗi được xác định bởi trình xử lý.

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);Dòng này ở đây nên được đặt bên trong phương thức onCreate. Nó là một lời gọi hàm theo ngữ cảnh.
Some Noob Student

1
Di chuyển EditText editText = (EditText) findViewById (R.id.editText1); sau setContentView (R.layout.main);
Diego Torres Milano

Bạn không thể sử dụng findViewByIdcho đến khi bạn đã gọi setContentView.
Ted Hopp

2
Vâng! bạn phải gọi setContentView (id) trước. Để hệ thống có thể hiển thị nội dung màn hình và sau đó bạn chỉ ra EditText có thể sẽ tồn tại trong nội dung màn hình của bạn. Nếu không, nó sẽ hiển thị một ngoại lệ với hộp thoại Buộc Đóng.
Adil Soomro

2
Lưu ý rằng bạn có thể đặt "gợi ý" thành một EditText, gợi ý này sẽ hiển thị văn bản khi trống và biến mất khi người dùng bắt đầu nhập. Thêm vào xml android:hint="your hint text here"của bạn EditText. Một 'gợi ý' thường được sử dụng để cho biết EditText được tạo ra để làm gì. Nó có thể không phải là những gì bạn đang tìm kiếm, nhưng tôi cũng đang tìm cách xóa EditTextnhấp chuột cho đến khi tôi phát hiện ra rằng "gợi ý" đã làm những gì tôi thực sự đang tìm kiếm.
Jecimi

Câu trả lời:


136

Trước tiên, bạn cần gọi setContentView(R.layout.main)tất cả các khởi tạo khác.

Vui lòng thử Mã bên dưới.

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
Xin chào, tôi biết đây là một câu trả lời cũ nhưng bạn là người duy nhất đề cập đến cả hai tùy chọn ( .clearhoặc .setText("")). Có sự khác biệt nào không? Khi nào tôi nên sử dụng cái nào hoặc chúng hoàn toàn giống nhau? Cảm ơn.
Alex,

editText.getText (). clear (); đã làm nt làm việc cho mr trong android studio 3.5.1
Abdul Wahid

186

Ngoài ra bạn có thể sử dụng mã bên dưới

editText.getText().clear();

Điều này thật tuyệt nếu bạn muốn làm theo chương trình.
John Smith

2
Ali, bạn hoàn toàn đúng. Nhưng chúng ta gọi phương thức getText () trước. Nó trả về cho chúng ta cá thể có thể chỉnh sửa, có phương thức clear ();
Serhii Nadolynskyi

42

chỉ cần sử dụng android:hintthuộc tính trong EditText của bạn. Văn bản này hiển thị khi hộp trống và không có tiêu điểm, nhưng biến mất khi chọn hộp EditText.


đây phải là câu trả lời được chấp nhận, +1 vì đơn giản.
John Smith

Đây là câu trả lời chính xác từ quan điểm thiết kế! Cảm ơn
kyxap

11

Chúng tôi có thể xóa dữ liệu EditText theo hai cách

Cài đặt First One EditText trống như dòng dưới đây

editext.setText("");

Cái thứ hai xóa dữ liệu EditText như thế này

editText.getText().clear();

Tôi đề nghị cách thứ hai


7

Mã của bạn phải là:

    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

Rất đơn giản để xóa các giá trị editText. Khi bạn nhấp vào nút thì chỉ theo 1 mã dòng.

Nút bên trong hoặc bất kỳ nơi nào bạn muốn. Chỉ sử dụng nút này

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

            }
        });
    }


}

Không gửi toàn bộ mã của bạn plz cung cấp giải pháp cần thiết cho op giúp đỡ của họ dễ dàng hiểu
Digvesh Patel

3

Tôi không biết mình đã mắc lỗi gì khi thực hiện các giải pháp ở trên, vì tôi đã không thành công với tôi

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

Điều này phù hợp với tôi,


2

// Để xóa khi nút Xóa được nhấp vào

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

Điều này sẽ giúp xóa các từ khóa sai mà bạn đã nhập vào, thay vì nhấn backspace nhiều lần, bạn có thể chỉ cần nhấp vào nút để xóa mọi thứ. Hy vọng nó giúp


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

bằng cách đặt Chuỗi trống, bạn có thể xóa văn bản chỉnh sửa của mình

    editext.setText("");

1

Trong XML, bạn có thể viết như sau:

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

và trong lớp java, bạn có thể có một lớp dưới đây:

    EditText searchHost;

OnCreate () bạn viết:

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

Việc này ổn với tôi.


1

Đối với Kotlin:

Tạo hai tiện ích mở rộng, một cho EditText và một cho TextView

Chỉnh sửa văn bản:

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

TextView:

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

và sử dụng nó như

myEditText.clear()

myTextView.clear()

0

Bạn cũng có thể sử dụng thuộc tính 'android: hint' trong EditText của mình từ mã:

editText.setHint(CharSequence hint / int resid);

Sau đó, bạn không cần bất kỳ onClickListener hoặc tương tự. Nhưng hãy lưu ý rằng giá trị gợi ý sẽ không được thông qua. EditText sẽ được để trống. Trong trường hợp này, bạn có thể đặt editText bằng giá trị deflault của mình:

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

0

Nếu việc sử dụng EditText là không bắt buộc, bạn có thể thực hiện hành vi này dễ dàng với các thành phần material mới:

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

Bạn chỉ phải chỉ định có thể vẽ mà bạn muốn cho nút sẽ xóa văn bản và hành động mà nó sẽ thực thi. Để xóa văn bản, bạn có thể sử dụng iconMode = "clear_text", nhưng cũng có sẵn "password_toggle".


0

Nó đơn giản: khai báo các biến phụ tùng ( editText, textView, buttonvv) trong lớp nhưng khởi tạo nó trong onCreatesau setContentView.

Vấn đề là khi bạn cố gắng truy cập vào một widget của một bố cục, trước tiên bạn phải khai báo bố cục. Khai báo bố cục là setContentView. Và khi bạn khởi tạo biến widget thông qua findViewByIdbạn đang truy cập vào idwidget trong bố cục chính trong setContentView.

Tôi hi vọng bạn có được nó!


-1

Tôi không chắc liệu bạn có tìm kiếm cái này không

    {
    <EditText
     .
     . 
     android:hint="Please enter your name here">
    }
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.