diff options
| -rw-r--r-- | api/current.txt | 3 | ||||
| -rw-r--r-- | core/java/android/widget/AbsListView.java | 34 | 
2 files changed, 32 insertions, 5 deletions
diff --git a/api/current.txt b/api/current.txt index 458c57766889..418be1b41b01 100644 --- a/api/current.txt +++ b/api/current.txt @@ -30395,6 +30395,7 @@ package android.widget {      ctor public AbsListView(android.content.Context, android.util.AttributeSet, int);      method public void afterTextChanged(android.text.Editable);      method public void beforeTextChanged(java.lang.CharSequence, int, int, int); +    method public boolean canScrollList(int);      method public void clearChoices();      method public void clearTextFilter();      method public void deferNotifyDataSetChanged(); @@ -30436,7 +30437,7 @@ package android.widget {      method public int pointToPosition(int, int);      method public long pointToRowId(int, int);      method public void reclaimViews(java.util.List<android.view.View>); -    method public boolean scrollListBy(int); +    method public void scrollListBy(int);      method public void setAdapter(android.widget.ListAdapter);      method public void setCacheColorHint(int);      method public void setChoiceMode(int); diff --git a/core/java/android/widget/AbsListView.java b/core/java/android/widget/AbsListView.java index be47bf076c19..c30802451099 100644 --- a/core/java/android/widget/AbsListView.java +++ b/core/java/android/widget/AbsListView.java @@ -4924,11 +4924,37 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te       * Scrolls the list items within the view by a specified number of pixels.       *       * @param y the amount of pixels to scroll by vertically -     * @return true if the list is able to scroll, or false if the list is -     *         already at the beginning/end and unable to scroll any more. +     * @see #canScrollList(int)       */ -    public boolean scrollListBy(int y) { -        return !trackMotionScroll(-y, -y); +    public void scrollListBy(int y) { +        trackMotionScroll(-y, -y); +    } + +    /** +     * Check if the items in the list can be scrolled in a certain direction. +     * +     * @param direction Negative to check scrolling up, positive to check +     *            scrolling down. +     * @return true if the list can be scrolled in the specified direction, +     *         false otherwise. +     * @see #scrollListBy(int) +     */ +    public boolean canScrollList(int direction) { +        final int childCount = getChildCount(); +        if (childCount == 0) { +            return false; +        } + +        final int firstPosition = mFirstPosition; +        final Rect listPadding = mListPadding; +        if (direction > 0) { +            final int lastBottom = getChildAt(childCount - 1).getBottom(); +            final int lastPosition = firstPosition + childCount; +            return lastPosition < mItemCount || lastBottom > getHeight() - listPadding.bottom; +        } else { +            final int firstTop = getChildAt(0).getTop(); +            return firstPosition > 0 || firstTop < listPadding.top; +        }      }      /**  |