Home | History | Annotate | Download | only in widget
      1 /*
      2  * Copyright (C) 2008 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 package android.widget;
     18 
     19 /**
     20  * Interface that may implemented on {@link Adapter}s to enable fast scrolling
     21  * between sections of an {@link AbsListView}.
     22  * <p>
     23  * A section is a group of list items that have something in common. For
     24  * example, they may begin with the same letter or they may be songs from the
     25  * same artist.
     26  * <p>
     27  * {@link ExpandableListAdapter}s that consider groups and sections as
     28  * synonymous should account for collapsed groups and return an appropriate
     29  * section/position.
     30  *
     31  * @see AbsListView#setFastScrollEnabled(boolean)
     32  */
     33 public interface SectionIndexer {
     34     /**
     35      * Returns an array of objects representing sections of the list. The
     36      * returned array and its contents should be non-null.
     37      * <p>
     38      * The list view will call toString() on the objects to get the preview text
     39      * to display while scrolling. For example, an adapter may return an array
     40      * of Strings representing letters of the alphabet. Or, it may return an
     41      * array of objects whose toString() methods return their section titles.
     42      *
     43      * @return the array of section objects
     44      */
     45     Object[] getSections();
     46 
     47     /**
     48      * Given the index of a section within the array of section objects, returns
     49      * the starting position of that section within the adapter.
     50      * <p>
     51      * If the section's starting position is outside of the adapter bounds, the
     52      * position must be clipped to fall within the size of the adapter.
     53      *
     54      * @param sectionIndex the index of the section within the array of section
     55      *            objects
     56      * @return the starting position of that section within the adapter,
     57      *         constrained to fall within the adapter bounds
     58      */
     59     int getPositionForSection(int sectionIndex);
     60 
     61     /**
     62      * Given a position within the adapter, returns the index of the
     63      * corresponding section within the array of section objects.
     64      * <p>
     65      * If the section index is outside of the section array bounds, the index
     66      * must be clipped to fall within the size of the section array.
     67      * <p>
     68      * For example, consider an indexer where the section at array index 0
     69      * starts at adapter position 100. Calling this method with position 10,
     70      * which is before the first section, must return index 0.
     71      *
     72      * @param position the position within the adapter for which to return the
     73      *            corresponding section index
     74      * @return the index of the corresponding section within the array of
     75      *         section objects, constrained to fall within the array bounds
     76      */
     77     int getSectionForPosition(int position);
     78 }
     79