输入时在EditText中清除文本

时间:2011-03-15 06:23:01

标签: android android-edittext

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

19 个答案:

答案 0 :(得分:170)

您也可以使用以下代码

editText.getText().clear();

答案 1 :(得分:91)

首先,您需要调用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("");
    }
}

答案 2 :(得分:37)

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

答案 3 :(得分:8)

我们可以通过两种方式清除EditText数据

第一个设置EditText为空,如下面的行

editext.setText("");

第二个清除EditText数据的方法

editText.getText().clear();

我建议第二种方式

答案 4 :(得分: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("");
                }
            }
        }

答案 5 :(得分: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("");
    }
}

答案 6 :(得分:4)

非常简单清除editText值。当你点击按钮时,只需按照1行代码。

  

内部按钮或任何你想要的地方。只能使用此

editText.setText("");   

答案 7 :(得分: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();

            }
        });
    }


}

答案 8 :(得分: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("");
        }
    });

这将有助于清除您键入的错误关键字,而不是一次又一次地按退格键,您只需单击按钮即可清除所有内容。它为我工作。希望它有助于

答案 9 :(得分: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;
    });

答案 10 :(得分:1)

对于Kotlin:

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

EditText:

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

TextView:

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

并像使用它

myEditText.clear()

myTextView.clear()

答案 11 :(得分:1)

通过设置空字符串,您可以清除编辑文本

    editext.setText("");

答案 12 :(得分:1)

我不知道在实施上述解决方案时我做了什么错误,但是他们对我不成功

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

这对我有用,

答案 13 :(得分: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... }

答案 14 :(得分: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();
    }
  }

答案 15 :(得分: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”。

答案 16 :(得分:0)

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

对我来说很好。

答案 17 :(得分:0)

这很简单:在类中声明小部件变量(editTexttextViewbutton等),然后在onCreate之后的setContentView中对其进行初始化。 / p>

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

我希望你能得到它!

答案 18 :(得分:-1)

我不确定您是否正在搜索

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