2011-03-04 134 views
0

我似乎無法使用我的ExpandableListView快速滾動。更重要的是,我在適配器中實現的SectionIndexer方法從來沒有被實際調用,並且我通過斷點驗證了這一點。無法快速滾動ExpandableListView

這裏是我的活動:

private void onCreate(Bundle a) { 
    ... 
    setContentView(R.layout.mylayout); 
    ... 
    setListAdapter(myAdapter); 
    getExpandableListView().setFastScrollEnabled(true); 
} 

這裏是我的佈局:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical"> 

    <ExpandableListView android:id="@+id/android:list" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:fastScrollEnabled="true"/> 

    <TextView android:id="@+id/android:empty" 
      android:text="EMPTY! DOOM!" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent"/> 
</LinearLayout> 

這裏是我的適配器,它的工作原理是方式:

public class Adapter extends AbstractExpandableListAdapter<TTD, TTL> 
     implements SectionIndexer { 

    public static class TTDHolder { 
     TextView title; 
    } 

    public static class TTLHolder { 
     TextView title; 
     ImageView icon; 
    } 

    private final Pattern alphaMatch = Pattern.compile("^[a-zA-Z]$"); 

    private final Pattern numberMatch = Pattern.compile("^\\d$"); 

    private LayoutInflater inflater; 

    public Adapter(Context context, int groupClosedView, int groupExpandedView, int childView, 
      List<Entry<TTD, List<TTL>>> objects) { 
     super(context, groupClosedView, groupExpandedView, childView, objects); 
     this.inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    } 

    public View getGroupView(int groupPosition, boolean isExpanded, 
      View convertView, ViewGroup parent) { 
     TTDHolder holder; 

     if (convertView != null) { 
      holder = (TTDHolder)convertView.getTag(); 
     } else { 
      convertView = inflater.inflate(R.layout.item, parent, false); 

      holder = new TTDHolder(); 
      holder.title = (TextView) convertView.findViewById(R.id.item_title); 

      convertView.setTag(holder); 
     } 

     holder.title.setText(this.getObjects().get(groupPosition).getKey().getName()); 

     return convertView; 
    } 

    public View getChildView(int groupPosition, int childPosition, 
      boolean isLastChild, View convertView, ViewGroup parent) { 
     TTLHolder holder; 

     if (convertView != null) { 
      holder = (TTLHolder) convertView.getTag(); 
     } else { 
      convertView = inflater.inflate(R.layout.item, parent, false); 

      holder = new TTLHolder(); 
      holder.title = (TextView) convertView.findViewById(R.id.item_title); 
      holder.icon = (ImageView) convertView.findViewById(R.id.item_icon); 

      convertView.setTag(holder); 
     } 

     holder.title.setText(this.getObjects().get(groupPosition).getValue() 
       .get(childPosition).getName()); 

     return convertView; 
    } 

    public Object[] getSections() { 
     return "*1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ".split(""); 
    } 

    public int getPositionForSection(int section) { 
     for (Entry<TTD, List<TTL>> entry : this.getObjects()) { 
      if (entry.getKey().getName().substring(0, 1) == getSections()[section]) 
       return this.getObjects().indexOf(entry); 
     } 

     return 0; 
    } 

    public int getSectionForPosition(int position) { 
     List<Object> sections = Arrays.asList(getSections()); 
     return sections.indexOf(this.getObjects().get(position).getKey().getName().substring(0, 1).toUpperCase()); 
    } 
} 

然而,當我滾動,我從來沒有看到快速滾動顯示,也沒有實際調用的方法。

回答

3

事實證明,您需要在適配器中擁有最少數量的項目才能顯示快速瀏覽滾動條。