问题描述
||
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();
}
}
}
});
解决方法
您的代码会怎样?
更改焦点时,您要求视图请求焦点(如果没有焦点),并要求视图清除焦点(如果焦点没有焦点)。
如果这些请求是异步的,那么当焦点再次从您的视图移到其他视图时,onFocusChange将不断被调用。
如果按照给定的要求处理请求,则将无限循环,并可能导致堆栈溢出。
, 在请求任何小部件的焦点时,随身携带小部件的ID。您既需要保留焦点的ID小部件,也需要逐渐获得焦点的小部件。然后适当地使用onFocusChangeListener。
请记住,在更改焦点侦听器上,两次调用了两个小部件,一个是失去焦点的小部件,另一个是获得焦点的小部件。