2011-06-11 87 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)',如果没有!为真正的比较。 – 2011-06-11 12:50:16

回答

0

您的代码会发生什么情况?

焦点发生变化时,您要求视图请求重点(如果视图没有它),并请求视图清除焦点(如果有焦点)。

如果这些请求是异步的,那么onFocusChange会一直重复调用,因为焦点从您的视图转移到其他视图。

如果请求按照给定的方式进行处理,则会无限循环,可能会发生堆栈溢出。

+0

代码的问题是它将设置焦点到下一个子视图(autotextcomplete在我的情况下)哪个控件移动,甚至到请求的视图...所以现在有两个焦点... – Sush 2011-06-14 11:23:57

+0

问题得到解决。实际上,焦点倾听者被召集了两次,一个焦点出来的焦点和一个焦点焦点的焦点。所以按照我上面的逻辑,焦点都变得焦点了。通过保持双向视图并根据需要设置焦点来解决问题。 – Sush 2013-03-04 06:42:21

0

让你的小工具ID与你同时请求任何小工具的焦点。你需要两个ID的小工具,让焦点和正在获得的小工具。然后适当地使用onFocusChangeListener。 请记住,更改焦点侦听器会同时调用两次小部件,失去焦点的小部件以及获取它的小部件。

相关问题