2011-06-11 4 views
1
setOnFocusChangeListener(new OnFocusChangeListener() 
    { 

     @Override 
      public void onFocusChange(View v, boolean hasFocus) 
      { 
       // TODO Auto-generated method stub 
      if (currentfocus==false) 
      { 
       if (!v.hasFocus()) 
       { 
        currentfocus=true; 
        v.requestFocus(); 
        return; 
       } 
      } 
       if(currentfocus==true) 
       { 
        if(v.hasFocus()) 
        { 
         v.clearFocus(); 
        } 
       } 
      } 
     }); 
+0

이 특정 문제에 대해 잘 모르겠지만 'if (currentfocus == false)'를 'if (! currentfocus)'로 쓰고! 진정한 비교를 위해서. –

답변

0

코드는 어떻게됩니까?

포커스가 변경된 경우 뷰에 포커스가없는 경우 포커스를 요청하고 뷰에 포커스가 있으면 포커스를 지우도록 요청합니다.

이러한 요청이 비동기 인 경우 onFocusChange는 포커스가 뷰에서 다른 뷰로 다시 이동함에 따라 계속해서 호출됩니다.

요청이 주어진대로 처리되면 무한 루프되고 아마도 스택 오버플로가 발생합니다.

+0

코드 문제는 다음 자식 뷰 (필자의 경우에는 autotextcomplete)로 포커스를 설정하고 요청 된 뷰로 컨트롤이 이동하는 경우에도 포커스를 설정합니다. – Sush

+0

문제가 해결되었습니다. 사실 포커스 리스너는 포커스를 벗어나는 뷰와 포커스를 얻는 뷰에 대해 두 번 호출됩니다. 그래서 위의 논리에 따라 포커스가 모두 커지고 있습니다. 문제는 두보기를 모두 유지하고 필요에 따라 포커스를 설정하여 흐려졌습니다. – Sush

0

위젯에 대한 포커스를 요청하면서 위젯 ID를 유지하십시오. 포커스를 유지하는 ID 위젯과 얻는 위젯이 모두 필요합니다. 그런 다음 onFocusChangeListener를 적절히 사용하십시오. 변경 포커스 수신기에서 두 위젯, 즉 포커스를 잃어버린 위젯과이를 얻는 위젯을 모두 호출한다는 점을 명심하십시오.

관련 문제