EditText가 포커스를 잃을 때 어떻게 알 수 있습니까?


162

EditText초점을 잃을 때 잡을 필요가 있는데 다른 질문을 찾았지만 답을 찾지 못했습니다.

내가 사용 OnFocusChangeListener과 같이

OnFocusChangeListener foco = new OnFocusChangeListener() {

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

    }
};

그러나 그것은 나를 위해 작동하지 않습니다.

답변:


342

구현 onFocusChangesetOnFocusChangeListener와 hasFocus에 대한 부울 매개 변수가있다. 이것이 거짓이면 다른 컨트롤에 대한 초점을 잃어버린 것입니다.

 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

@ Léon Pelletier 진실? 정말? 사용자가 다른 포커스 가능한 컨트롤을 터치하면 editText가이 컨트롤을 잃습니다. 문제가 없습니다. 코드로 초점을 설정해도 마찬가지입니다.
놀라운 1

@Jona 어디서나 추가 할 수 있지만 onCreate () 작동합니다. 충돌하면 뭔가 잘못한 것입니다.
놀라운 1

8

이 인터페이스를 인수로 사용하려면 Activity구현 하십시오 OnFocusChangeListener().

public class Shops extends AppCompatActivity implements View.OnFocusChangeListener{

당신에 OnCreate당신은 예를 들어 리스너를 추가 할 수 있습니다 :

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

그런 다음 안드로이드 스튜디오는 인터페이스에서 메소드를 추가하라는 메시지를 표시하고 수락합니다 ...

@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.