2011-07-30 6 views
2

Comment créer un indexeur de section catégorique pour un listview avec un tableau de chaînes? J'ai vu des exemples d'indexeur d'alphabet, mais comment est-il mis en œuvre pour les catégories, par ex. Section 1, Section 2, Section 3 ...?tutoriel android sectionindexer?

+0

Je fais quelque chose de similaire ICI http://stackoverflow.com/questions/10224233/alphabetindexer-with-custom-adapter-managed-by-loadermanager – toobsco42

+0

[cochez cette case] (http://androidcustomviews.com/portfolio-category/custom-views/) –

Répondre

4

Personnaliser ce que l'adaptateur que pour vos besoins et ensemble à votre liste voir c'est tout, pris de m here

public class ContactsAdapter extends BaseAdapter implements SectionIndexer { 

Context context; 
String[] strings; 
String[] sections ; 
HashMap<String, Integer> alphaIndexer; 


public ContactsAdapter(Context context, String[] strings) { 
    this.context = context; 
    this.strings = strings; 
    alphaIndexer = new HashMap<String, Integer>(); 
    int size = strings.length; 

    for (int x = 0; x < size; x++) { 
     String s = strings[x]; 
     String ch = s.substring(0, 1); 
     ch = ch.toUpperCase(); 
     if (!alphaIndexer.containsKey(ch)) 
      alphaIndexer.put(ch, x); 
    } 

    Set<String> sectionLetters = alphaIndexer.keySet(); 
    ArrayList<String> sectionList = new ArrayList<>(sectionLetters); 
    Collections.sort(sectionList); 
    sections = new String[sectionList.size()]; 
    sectionList.toArray(sections); 

} 

@Override 
public int getCount() { 
    return strings.length; 
} 

@Override 
public Object getItem(int position) { 
    return strings[position]; 
} 

@Override 
public long getItemId(int position) { 
    return position; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 


    ViewHolder holder; 
    if (convertView == null) { 
     convertView = LayoutInflater.from(context).inflate(R.layout.main, parent, false); 
     holder = new ViewHolder(); 
     holder.text = (TextView) convertView.findViewById(R.id.tv_contact); 
     convertView.setTag(holder); 
    } else { 
     holder = (ViewHolder) convertView.getTag(); 
    } 

    holder.text.setText(strings[position]); 

    return convertView; 
} 

@Override 
public Object[] getSections() { 

    return sections; 
} 

@Override 
public int getPositionForSection(int sectionIndex) { 
    return alphaIndexer.get(sections[sectionIndex]); 
} 

@Override 
public int getSectionForPosition(int position) { 
    return 0; 
} 

static class ViewHolder { 
    TextView text; 
} 
} 

Sur votre vue liste

ContactsAdapter contactsAdapter = new ContactsAdapter(Registration.this, YOUR_Array; 

    listview.setAdapter(contactsAdapter); 

    listview.setFastScrollEnabled(true);