Android ListView上下选择,定位
最近在做一个项目,用到遥控器。其中有一个需求是遥控器选择一个列表的内容,如果ListView可见内容为5个,遥控往下选择的时候要选择到第五个内容才需要往上扯,同理往上选择的时候到可见的第一个的时候内容才往下更新。Listview定位有两个方法:
ListView.setSelection(int position)
ListView.setSelectionFromTop(int position, int y);
开始我直接使用ListView.setSelection(int position),发现无论position如何变化,选中的位置都是ListView的最顶一个Item。
后来想到的是smoothScrollToPosition(),要是不设置setSelection的情况下Adapter的notifyDataSetChanged后显示又去回到第一个Item。设置完选中内容后notifyDataSetChanged()再smoothScrollToPosition()就会出现UI跳跃太明显。
最后是选择使用ListView.setSelectionFromTop(int position, int y)。
我的做法如下,如果有朋友有更好的方法指导下,
int itemHeight = 0;
int distance = 0;
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode==87){
if (distance>0) {
distance--;
}
mBaseListAdapter.onUpTap();
listView.setSelectionFromTop(mBaseListAdapter.getSelectItem(),distance*itemHeight);
return true;
}
if (keyCode==88){
if (distance<listView.getChildCount()-1) {
distance++;
}
mBaseListAdapter.onDownTap();
listView.setSelectionFromTop(mBaseListAdapter.getSelectItem(),distance*itemHeight);
return true;
}
return super.onKeyDown(keyCode, event);
}
每天积累一点点,