我发现在我的应用中使用方向键或者轨迹球进行导航时,如果你向右移动并且列表视图失去焦点,当列表视图重新获得焦点时,一个不同的子项将被赋予焦点而不是上一个获得焦点的子项。我试图使用onFocusChange(...)来保存哪个子项拥有焦点,但看起来这个方法在失去焦点之后才被调用,所以我永远也无法获取上一个拥有焦点的子项。是否有一种方式可以获得谁拥有焦点,以便在列表视图再次获得焦点时调用requestFocus()方法呢?
不幸的是,我不能使用handler,因为这并不是一个经常使用的功能,我不想为了一个小功能而牺牲性能。
以下是我尝试过但未成功的代码(无论如何,focusedView始终为空):
不幸的是,我不能使用handler,因为这并不是一个经常使用的功能,我不想为了一个小功能而牺牲性能。
以下是我尝试过但未成功的代码(无论如何,focusedView始终为空):
mainListView.setOnFocusChangeListener(new OnFocusChangeListener() {
public void onFocusChange(View v, boolean hasFocus) {
if(focusedView == null ) { Log.i("focus", "focusedView == null"); }
if(hasFocus && focusedView != null) {
Log.i("focus", "Focus has been Recieved.............");
focusedView.requestFocus();
} else {
// Focus has been lost so save the id of what the user had selected
Log.i("focus", "Focus has been Lost.............");
focusedView = mainListView.findFocus();
}
}
});
谢谢!