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

Commit 960338ad authored by Alan Viverette's avatar Alan Viverette Committed by Android (Google) Code Review
Browse files

Merge "Update documentation for FastScroller and SectionIndexer" into klp-dev

parents 0a94b9ce 86f5e895
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);
}