How do I create a categorical section indexer for a listview with string array? I have seen examples for alphabet indexer, but how is it implemented for categories e.g. Section 1, Section 2, Section 3...?
Customize this as adapter as for your need and set to your list view thats all ,taken from 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;
}
}
On your list view
ContactsAdapter contactsAdapter = new ContactsAdapter(Registration.this, YOUR_Array;
listview.setAdapter(contactsAdapter);
listview.setFastScrollEnabled(true);
bunbun
Lots of answers here:
- Creating categories in a ListView?
- AlphabetIndexer with Custom Adapter managed by LoaderManager
- http://tribulant.com/forums/topic/how-do-i-get-a-list-view-of-categories-with-image-thumbnail-and-description
thanks to everyone for the referrals
来源:https://stackoverflow.com/questions/6883785/android-sectionindexer-tutorial