输入后清除EditText中的文本


92

我正在尝试设置和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("");
    }
}

EditText editText = (EditText)findViewById(R.id.editText1);这里的这一行应该放在onCreate方法中。它是上下文调用的函数。
一些Noob学生

1
移动EditText editText =(EditText)findViewById(R.id.editText1); 在setContentView(R.layout.main)之后;
迭戈·托雷斯·米兰诺,

您必须findViewById等到致电后才能使用setContentView
泰德·霍普

2
是的 您必须先调用setContentView(id)。这样系统就可以显示屏幕内容,然后指出可能存在于屏幕内容中的EditText。否则,它将在“强制关闭”对话框中显示异常。
Adil Soomro

2
请注意,您可以将设置为“提示” EditText,使其在为空时显示文本,而在用户开始键入时消失。添加android:hint="your hint text here"到您EditText的xml中。通常使用“提示”来表示为EditText做些什么。可能不是您要找的东西,但是我也一直想清除EditText点击,直到我发现“提示”达到了我真正想要的目的。
Jecimi 2012年

Answers:


135

首先,您需要调用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(); nt在android studio 3.5.1中为先生工作过吗
Abdul Wahid


41

只需android:hint在EditText中使用该属性即可。当该框为空且未聚焦时,该文本显示出来,但在选择EditText框时消失。


这应该是公认的答案,为简单起见,+ 1。
约翰·史密斯

从设计角度来看,这是正确的答案!谢谢
kyxap

10

我们可以通过两种方式清除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 2014年

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

通过设置Empty string,您可以清除您的edittext

    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。

EditText:

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

TextView:

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

并像这样使用

myEditText.clear()

myTextView.clear()

0

您还可以通过以下代码在EditText中使用'android:hint'属性:

editText.setHint(CharSequence hint / int resid);

然后,您不需要任何onClickListener或类似的对象。但是请注意,不会传递提示值。editText将保持为空。在这种情况下,可以使用默认值设置editText:

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

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

我的功能

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

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

原因很简单:声明控件变量(editTexttextViewbutton等)类,但在其初始化onCreatesetContentView

问题是,当您首先尝试访问布局的窗口小部件时,必须声明布局。声明布局为setContentView。当您通过初始化小部件变量时,findViewById正在访问id主布局中小部件的setContentView

希望您能理解!


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.