入力時にEditTextのテキストをクリア


92

私は、edittext要素内をクリックすると現在のコンテンツがクリアされるように、onclicklistenerを設定しようとしています。ここに何か問題がありますか?このコードをコンパイルすると、強制終了して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);の後;
Diego Torres Milano

findViewByIdを呼び出すまで使用できませんsetContentView
テッド・ホップ

2
うん!最初にsetContentView(id)を呼び出す必要があります。システムが画面のコンテンツを表示できるように、画面のコンテンツにおそらく存在するEditTextを指摘します。それ以外の場合は、強制終了ダイアログで例外が表示されます。
Adil Soomro、2011年

2
「ヒント」をに設定できることに注意してくださいEditText。これにより、空のときにテキストが表示され、ユーザーが入力を開始するとテキストが非表示になります。xmlに追加android:hint="your hint text here"しますEditText。通常、「ヒント」はEditTextの目的を示すために使用されます。それはあなたが探しているものではないかもしれませんEditTextが、「ヒント」が本当に探していたものを実行していることがわかるまで、クリックをクリアしようとしていました。
ジェシミ2012

回答:


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(""))について言及しているのはあなただけです。違いはありますか?どちらを使用する必要がありますか、またはまったく同じですか?ありがとう。
アレックス

editText.getText()。clear(); Androidスタジオ3.5.1でmrのntが機能しませんでした
Abdul Wahid


41

android:hintEditTextで属性を使用するだけです。このテキストは、ボックスが空でフォーカスされていないときに表示されますが、EditTextボックスを選択すると消えます。


これは受け入れられる答えであるはずです。簡単にするために+1です。
ジョンスミス

これはデザインの観点からの正解です!ありがとう
kyxap 2018年

10

EditTextデータは2つの方法でクリアできます

最初の1つの設定EditTextは次の行のように空です

editext.setText("");

2番目は、このように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();

            }
        });
    }


}

plzはあなたの全体のコードを投稿OPのためにそれらを簡単に理解するためにその助けに必要なソリューションを提供していない
Digveshパテル

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

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用の2つの拡張を作成します。

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クラス内など)だけでなく、それを初期化onCreateした後setContentView

問題は、最初にレイアウトのウィジェットにアクセスしようとするときに、レイアウトを宣言する必要があることです。レイアウトの宣言はですsetContentView。また、ウィジェット変数を初期化すると、のメインレイアウトでウィジェットfindViewByIdのにアクセスします。idsetContentView

よろしくお願いします!


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.