2011-03-04 2 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()); 
    } 
} 
그러나

, 내가 스크롤, 빠른 스크롤러가 나타나지 않으며, 실제로 SectionIndexer 메서드가 실제로 호출되지 않습니다.

답변

3

빠른보기 스크롤러가 표시 되려면 어댑터에 최소한의 항목이 있어야합니다.