EditTextがフォーカスを失ったことをどのように知ることができますか?


162

EditTextがフォーカスを失ったときにキャッチする必要があります。他の質問を検索しましたが、回答が見つかりませんでした。

私はOnFocusChangeListenerこのように使用しました

OnFocusChangeListener foco = new OnFocusChangeListener() {

    @Override
    public void onFocusChange(View v, boolean hasFocus) {
        // TODO Auto-generated method stub

    }
};

しかし、それは私にはうまくいきません。

回答:


342

の実装onFocusChangesetOnFocusChangeListener、hasFocusのブールパラメータがあります。これがfalseの場合、別のコントロールにフォーカスを失っています。

 EditText txtEdit = (EditText) findViewById(R.id.edittxt);

 txtEdit.setOnFocusChangeListener(new OnFocusChangeListener() {          
        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            if (!hasFocus) {
               // code to execute when EditText loses focus
            }
        }
    });

20
+1-ただし、編集テキストがリストビューにある場合、キーを押すたびにボックスが失われ、フォーカスが移動することに注意してください。:現在フォーカスボックスのトラックに保つために、このソリューションを参照してくださいstackoverflow.com/questions/9527067/...
bsautner

表示するコードはどこに追加すればよいですか?「onCreate」でそのまま使用すると、アプリがクラッシュします
Jona

@レオン・ペルティエ真実?本当に?ユーザーが別のフォーカス可能なコントロールに触れると、editTextはそれを失います。問題はありません。コードでフォーカスを設定した場合も同様です。
信じられないほどの月

@Jona onCreate()は機能しますが、どこにでも追加できます。クラッシュした場合、何か間違ったことをします。
信じられないほどの月

8

このインターフェースを因数分解して使用する場合は、Activity実装をOnFocusChangeListener()用意してください。例:

public class Shops extends AppCompatActivity implements View.OnFocusChangeListener{

OnCreateたとえば、リスナーを追加できます。

editTextResearch.setOnFocusChangeListener(this);
editTextMyWords.setOnFocusChangeListener(this);
editTextPhone.setOnFocusChangeListener(this);

その後、android studioはインターフェイスからメソッドを追加するように求め、それを受け入れます...次のようになります。

@Override
public void onFocusChange(View v, boolean hasFocus) {
// todo your code here...
}

因数分解されたコードがあるので、それを行う必要があります:

@Override
public void onFocusChange(View v, boolean hasFocus) {
   if (hasFocus) {
        editTextResearch.setText("");
        editTextMyWords.setText("");
        editTextPhone.setText("");
    }
    if (!hasFocus){
        editTextResearch.setText("BlaBlaBla");
        editTextMyWords.setText(" One Two Tree!");
        editTextPhone.setText("\"your phone here:\"");
    }
}

でコーディングするもの!hasFocusはすべて、フォーカスを失うアイテムの動作のためのものです。ただし、このような状態では、フォーカスを変更するとユーザーのエントリが上書きされる可能性があることに注意してください。


1
'!hasFocus'ではなく 'else'を使用しないのはなぜですか
Salman Nazir

当時、私は物事を非常に明確にしたかっただけですが、とにかくそれは使用できないので、それは使い物になりません...
Cerberus


1

正しく機能する

EditText et_mobile= (EditText) findViewById(R.id.edittxt);

et_mobile.setOnFocusChangeListener(new OnFocusChangeListener() {          
    @Override
    public void onFocusChange(View v, boolean hasFocus) {
        if (!hasFocus) {
            // code to execute when EditText loses focus
            if (et_mobile.getText().toString().trim().length() == 0) {
                CommonMethod.showAlert("Please enter name", FeedbackSubmtActivity.this);
            }
        }
    }
});



public static void showAlert(String message, Activity context) {

    final AlertDialog.Builder builder = new AlertDialog.Builder(context);
    builder.setMessage(message).setCancelable(false)
            .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {

                }
            });
    try {
        builder.show();
    } catch (Exception e) {
        e.printStackTrace();
    }

}

0

Java 8ラムダ式の使用:

editText.setOnFocusChangeListener((v, hasFocus) -> {
    if(!hasFocus) {
        String value = String.valueOf( editText.getText() );
    }        
});
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.