public class MessageListView extends ListView {
public MessageListView(Context context) {
super(context);
}
public MessageListView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MessageListView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
public MessageListView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
//1、通过判断ListView当前被选择item的position,如果是最后一条就setSelection(0);可达到循环的目的
if (event.getAction() == KeyEvent.ACTION_DOWN) {
if (KeyEvent.KEYCODE_DPAD_DOWN == event.getKeyCode()) {
setSelection(getNextPosition());
return true;
}
}
//KeyEvent.ACTION_UP
return super.dispatchKeyEvent(event);
}
//2、down事件到dispatchKeyEvent时,找下一个否符合要求item的position,再setSelection()
// 达到"略过一些item,跳到指定item的效果"
private int getNextPosition() {
// for->
// getSelectedItemPosition()
// getAdapter().getCount()
// getAdapter().getItemViewType()
// return 符合要求返回;
return getSelectedItemPosition() + 2 < getAdapter().getCount()
? getSelectedItemPosition() + 2
: getAdapter().getCount() - 1;
}
}
按键实现ListView循环滚动、ListView item焦点处理(向下按键使ListView跳转到指定Item的一种思路)
猜你喜欢
转载自blog.csdn.net/yfbdxz/article/details/80369093
今日推荐
周排行