在输入框输入时清除文本

115

我正在尝试设置一个onclicklistener,以便当我点击edittext元素时,它会清除其当前内容。这里有什么问题吗?当我编译此代码时,我会得到一个强制退出和ActivityManager:无法分派DDM块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("");
    }
}

1
将EditText editText = (EditText)findViewById(R.id.editText1);移动到setContentView(R.layout.main);之后。 - Diego Torres Milano
在调用setContentView之前,您不能使用findViewById - Ted Hopp
谢谢大家!我必须在之后声明它的原因是什么? - locoboy
2
是的!你必须先调用setContentView(id)方法。这样系统才能显示屏幕内容,然后你再指出EditText,它可能存在于你的屏幕内容中。否则会显示一个强制关闭对话框的异常。 - Adil Soomro
2
请注意,您可以为“EditText”设置“提示”,这使其在为空时显示文本,并在用户开始输入时消失。在xml中的“EditText”中添加“android:hint =“your hint text here””。 “提示”通常用于指示EditText的用途。这可能不是您要寻找的内容,但我也想在单击时清除“EditText”,直到我发现“提示”确实符合我的需求。 - Jecimi
显示剩余3条评论
18个回答

236

你也可以使用以下代码:

editText.getText().clear();

如果你想进行编程,这将是非常棒的选择。 - Giga Chad Coding
2
阿里,你说得完全正确。但是我们首先调用getText()方法。它会返回一个Editable实例,该实例具有clear()方法。 - Serhii Nadolynskyi

151

首先需要调用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(); 在 Android Studio 3.5.1 中对我无效。 - Abdul Wahid

45
只需在EditText中使用android:hint属性。此文本将在该框为空且未聚焦时显示,但在选择EditText框后消失。

这应该是被接受的答案,简单易懂。+1 - Giga Chad Coding
这是从设计角度来看的正确答案!谢谢。 - kyxap

15

我们可以用两种方法清除EditText数据

第一种方法是将EditText设置为空,如下所示:

editext.setText("");

第二种方法是通过如下方式清除EditText中的数据

editText.getText().clear();

我建议采用第二种方式


这是一个旧的帖子,但我找不到更好的来发布这个问题。我已经尝试过: - PeteC
这是一个旧的帖子,但我找不到更好的帖子来发布这个问题。我已经尝试了OnClick与edittext.setText("")。当用户点击EditText时,任何先前的文本都会被清除,并弹出键盘。我可以输入数字,但是当我在键盘上点击完成时,数字会被清除,键盘仍然准备好输入更多数字。我无法摆脱键盘,除非重新启动应用程序。 - PeteC
你为什么建议第二种方式?它有什么优点?请详细说明。 - Captain Jack Sparrow

8

您的代码应该是:

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

6

对于Kotlin:

创建两个扩展,一个用于EditText,另一个用于TextView

EditText:

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

文本视图:

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

并像这样使用它

myEditText.clear()

myTextView.clear()

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的值非常简单。当您点击按钮时,只需要遵循一行代码。

在按钮或任何地方使用以下代码:

editText.setText("");   

3

我不知道在实施上述解决方案时犯了什么错误,但对我来说它们都失败了。

txtDeck.setOnFocusChangeListener(new OnFocusChangeListener() {
    @Override       
    public void onFocusChange(View v, boolean hasFocus) {
        txtDeck.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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接