按鍵實現ListView循環滾動、ListView item焦點處理(向下按鍵使ListView跳轉到指定Item的一種思路)

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;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章