EditText의 포커스를 처리하는 이벤트


145

누구든지의 초점과 관련된 이벤트를 제안 할 수 있습니까 EditText? 내 응용 프로그램에는 EditTextURL이 허용되는가 포함되어 있습니다 .

이제 내 문제는 사용자가 클릭 이벤트없이 필드에 URL을 입력하고 추가로 이동 한 후, 즉 포커스가에서 이동 EditText할 때 입력 한 URL을 감지하고 서버로 이동한다는 것입니다.

Json Parsing을 사용하여 답장을 받으면 더 편리합니다.

답변:


519

다음은 포커스 리스너 예입니다.

editText.setOnFocusChangeListener(new OnFocusChangeListener() {
    @Override
    public void onFocusChange(View view, boolean hasFocus) {
        if (hasFocus) {
            Toast.makeText(getApplicationContext(), "Got the focus", Toast.LENGTH_LONG).show();
        } else {
            Toast.makeText(getApplicationContext(), "Lost the focus", Toast.LENGTH_LONG).show();
        }
    }
});

포커스 변경 리스너 내부의 조각에서 UI를 업데이트 할 수 없습니다. 어떻게 생각하십니까?
moDev

2
작동하지 않습니다. 일부 장치에서 "입력"또는 키보드 숨기기 버튼으로 키보드를 숨기면 "초점 상실"이 시작되지 않습니다. 편집 텍스트에 다시 초점을 맞추면 "초점을 얻습니다"라고 표시되지 않습니다.
SnowWolf

1
소프트 키보드가 표시 될 때 레이아웃 크기를 조정하도록 설정했거나 TextWatcher를 사용하여 UI 관련 작업을 수행하는 경우 입력 한 각 문자에 대해 리스너가 많이 호출 될 수 있습니다! stackoverflow.com/questions/14727248/…
M_M

12
  1. 클래스 위에 EditText 객체를 선언하십시오.

     EditText myEditText;
  2. onCreate 함수에서 EditText를 찾고 EditText의 setOnFocusChangeListener를 찾으십시오.

    myEditText = findViewById(R.id.yourEditTextNameInxml); 
    
    myEditText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
                @Override
                public void onFocusChange(View view, boolean hasFocus) {
                    if (!hasFocus) {
                         Toast.makeText(this, "Focus Lose", Toast.LENGTH_SHORT).show();
                    }else{
                        Toast.makeText(this, "Get Focus", Toast.LENGTH_SHORT).show();
                    }
    
                }
            });

잘 작동합니다.


11

kotlin에있을 때 다음과 같이 보일 것입니다 :

editText.setOnFocusChangeListener { view, hasFocus ->
        if (hasFocus) toast("focused") else toast("focuse lose")
    }

4

위의 유효한 솔루션으로 작동하지 않은 사람들에게는 여기에 다른 해결 방법이 있습니다.

 searchView.setOnQueryTextFocusChangeListener(new View.OnFocusChangeListener() {
        @Override
        public void onFocusChange(View view, boolean isFocused) {
            if(!isFocused)
            {
                Toast.makeText(MainActivity.this,"not focused",Toast.LENGTH_SHORT).show();

            }
        }
    });

이것은 효과가 있었지만 솔루션 위의 y가 나에게는
효과가 없다는
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.