Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 86f5e895 authored by Alan Viverette's avatar Alan Viverette
Browse files

Update documentation for FastScroller and SectionIndexer

BUG: 3341285
Change-Id: I0607031576eaaecaebe848437cfbacd0d1a4b161
parent 12285f3d
Loading
Loading
Loading
Loading
+23 −14
Original line number Diff line number Diff line
@@ -1211,13 +1211,19 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te
    }

    /**
     * Enables fast scrolling by letting the user quickly scroll through lists by
     * dragging the fast scroll thumb. The adapter attached to the list may want
     * to implement {@link SectionIndexer} if it wishes to display alphabet preview and
     * jump between sections of the list.
     * Specifies whether fast scrolling is enabled or disabled.
     * <p>
     * When fast scrolling is enabled, the user can quickly scroll through lists
     * by dragging the fast scroll thumb.
     * <p>
     * If the adapter backing this list implements {@link SectionIndexer}, the
     * fast scroller will display section header previews as the user scrolls.
     * Additionally, the user will be able to quickly jump between sections by
     * tapping along the length of the scroll bar.
     *
     * @see SectionIndexer
     * @see #isFastScrollEnabled()
     * @param enabled whether or not to enable fast scrolling
     * @param enabled true to enable fast scrolling, false otherwise
     */
    public void setFastScrollEnabled(final boolean enabled) {
        if (mFastScrollEnabled != enabled) {
@@ -1252,13 +1258,16 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te
    }

    /**
     * Set whether or not the fast scroller should always be shown in place of the
     * standard scrollbars. Fast scrollers shown in this way will not fade out and will
     * be a permanent fixture within the list. Best combined with an inset scroll bar style
     * that will ensure enough padding. This will enable fast scrolling if it is not
     * Set whether or not the fast scroller should always be shown in place of
     * the standard scroll bars. This will enable fast scrolling if it is not
     * already enabled.
     * <p>
     * Fast scrollers shown in this way will not fade out and will be a
     * permanent fixture within the list. This is best combined with an inset
     * scroll bar style to ensure the scroll bar does not overlap content.
     *
     * @param alwaysShow true if the fast scroller should always be displayed.
     * @param alwaysShow true if the fast scroller should always be displayed,
     *            false otherwise
     * @see #setScrollBarStyle(int)
     * @see #setFastScrollEnabled(boolean)
     */
@@ -1297,10 +1306,9 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te
    }

    /**
     * Returns true if the fast scroller is set to always show on this view rather than
     * fade out when not in use.
     * Returns true if the fast scroller is set to always show on this view.
     *
     * @return true if the fast scroller will always show.
     * @return true if the fast scroller will always show
     * @see #setFastScrollAlwaysVisible(boolean)
     */
    public boolean isFastScrollAlwaysVisible() {
@@ -1316,7 +1324,8 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te
    }

    /**
     * Returns the current state of the fast scroll feature.
     * Returns true if the fast scroller is enabled.
     *
     * @see #setFastScrollEnabled(boolean)
     * @return true if fast scroll is enabled, false otherwise
     */
+48 −24
Original line number Diff line number Diff line
@@ -17,38 +17,62 @@
package android.widget;

/**
 * Interface that should be implemented on Adapters to enable fast scrolling 
 * in an {@link AbsListView} between sections of the list. A section is a group of list items
 * to jump to that have something in common. For example, they may begin with the
 * same letter or they may be songs from the same artist. ExpandableListAdapters that
 * consider groups and sections as synonymous should account for collapsed groups and return
 * an appropriate section/position.
 * Interface that may implemented on {@link Adapter}s to enable fast scrolling
 * between sections of an {@link AbsListView}.
 * <p>
 * A section is a group of list items that have something in common. For
 * example, they may begin with the same letter or they may be songs from the
 * same artist.
 * <p>
 * {@link ExpandableListAdapter}s that consider groups and sections as
 * synonymous should account for collapsed groups and return an appropriate
 * section/position.
 *
 * @see AbsListView#setFastScrollEnabled(boolean)
 */
public interface SectionIndexer {
    /**
     * This provides the list view with an array of section objects. In the simplest
     * case these are Strings, each containing one letter of the alphabet.
     * They could be more complex objects that indicate the grouping for the adapter's
     * consumption. The list view will call toString() on the objects to get the
     * preview letter to display while scrolling.
     * @return the array of objects that indicate the different sections of the list.
     * Returns an array of objects representing sections of the list. The
     * returned array and its contents should be non-null.
     * <p>
     * The list view will call toString() on the objects to get the preview text
     * to display while scrolling. For example, an adapter may return an array
     * of Strings representing letters of the alphabet. Or, it may return an
     * array of objects whose toString() methods return their section titles.
     *
     * @return the array of section objects
     */
    Object[] getSections();

    /**
     * Provides the starting index in the list for a given section.
     * @param section the index of the section to jump to.
     * @return the starting position of that section. If the section is out of bounds, the
     * position must be clipped to fall within the size of the list.
     * Given the index of a section within the array of section objects, returns
     * the starting position of that section within the adapter.
     * <p>
     * If the section's starting position is outside of the adapter bounds, the
     * position must be clipped to fall within the size of the adapter.
     *
     * @param sectionIndex the index of the section within the array of section
     *            objects
     * @return the starting position of that section within the adapter,
     *         constrained to fall within the adapter bounds
     */
    int getPositionForSection(int section);
    int getPositionForSection(int sectionIndex);

    /**
     * This is a reverse mapping to fetch the section index for a given position
     * in the list.
     * @param position the position for which to return the section
     * @return the section index. If the position is out of bounds, the section index
     * Given a position within the adapter, returns the index of the
     * corresponding section within the array of section objects.
     * <p>
     * If the section index is outside of the section array bounds, the index
     * must be clipped to fall within the size of the section array.
     * <p>
     * For example, consider an indexer where the section at array index 0
     * starts at adapter position 100. Calling this method with position 10,
     * which is before the first section, must return index 0.
     *
     * @param position the position within the adapter for which to return the
     *            corresponding section index
     * @return the index of the corresponding section within the array of
     *         section objects, constrained to fall within the array bounds
     */
    int getSectionForPosition(int position);
}