读书人

android源码解析-ListView(下)

发布时间: 2013-02-04 10:50:22 作者: rapoo

android源码解析--ListView(上)

每当自己想要学一点东西的时候,就快要到10点半了,还有十几天就要回家,总是有些兴奋,今天得知娜姐进了澳网的女单决赛,周末的时候可以看一下,希望能在澳网女单决赛之前写好这篇博客,好了,不废话,开始正题。

在一年多以前,写过一篇关于listview方法的文章:listView属性及方法小析,现在再重新看下其源码。

在listview的源码中,在46行有一个小的主意事项:

/**     * Find a position that can be selected (i.e., is not a separator).     *     * @param position The starting position to look at.     * @param lookDown Whether to look down for other positions.     * @return The next selectable position starting at position and then searching either up or     *         down. Returns {@link #INVALID_POSITION} if nothing can be found.     */    @Override    int lookForSelectablePosition(int position, boolean lookDown) {        final ListAdapter adapter = mAdapter;        if (adapter == null || isInTouchMode()) {            return INVALID_POSITION;        }        final int count = adapter.getCount();        if (!mAreAllItemsSelectable) {            if (lookDown) {                position = Math.max(0, position);                while (position < count && !adapter.isEnabled(position)) {                    position++;                }            } else {                position = Math.min(position, count - 1);                while (position >= 0 && !adapter.isEnabled(position)) {                    position--;                }            }            if (position < 0 || position >= count) {                return INVALID_POSITION;            }            return position;        } else {            if (position < 0 || position >= count) {                return INVALID_POSITION;            }            return position;        }    }

lookDown:是否往下选择。

PS:3600行的代码,在一篇文章里面偏多,所以把本文分为了上下两篇,分析的比较简陋,但会在以后慢慢补充。




读书人网 >Android

热点推荐