Android: cómo usar SectionIndexer

Estoy intentando encontrar una manera de utilizar SectionIndexer , en vez de AlphabetIndexer . Lo que me interesa hacer es tener elementos de una matriz de cadenas en los encabezados de sección en lugar de alfabetos. No he podido encontrar ningún código de ejemplo usando el indexador de sección.

Aquí hay un código de ejemplo para AlphabetIndexer :

 private AlphabetIndexer indexer; indexer = new AlphabetIndexer(c, c.getColumnIndexOrThrow( DbHelper.COUNTRIES_NAME),"ABCDEFGHIJKLMNOPQRSTUVWXYZ"); 

¿Es posible pasar un stringArray lugar de "ABCDEFGHIJKLMNOPQRSTUVWXYZ" al AlphabetIndexer por lo que puedo por ejemplo en lugar de "A", "B", … "Z" como encabezado tiene "Libro", "Alimentación", … En los encabezados?

¿Si no cuál es la mejor manera de hacer eso? Cualquier referencia a un código de ejemplo que utiliza SectionIndexer lugar de AlphabetIndexer sería útil.

Gracias por la ayuda. TJ

One Solution collect form web for “Android: cómo usar SectionIndexer”

Puede intentar escribir un ArrayAdapter personalizado y, básicamente, devolver una vista de "encabezado de sección" en el getView(...) para las posiciones donde deben aparecer los encabezados.

También tendrá que sobrescribir getViewTypeCount () para devolver el número de nuevos tipos de vistas (en este caso 2) y getItemViewType (int position) para devolver el tipo de vista de la posición actual.

Además, el onItemClickListener debe comprobar si el elemento en el que ha hecho clic es un encabezado de sección.

Este es mi adaptador de array personalizado:

 public class ItemListAdapter extends ArrayAdapter<ModelItem> { private static final int TYPE_SECTION_HEADER = 0; private static final int TYPE_LIST_ITEM = 1; int mDefaultRowLayoutResID; Context mContext; LayoutInflater mInflater; ArrayList<ModelItem> lItems; public ItemListAdapter(Context context, int resource, ArrayList<ModelItem> items) { super(context, resource, items); mContext = context; mResource = resource; mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); lItems = items; } @Override public ModelItem getItem(int position) { return lItems.get(position); } @Override public int getCount() { return lItems.size(); } @Override public int getViewTypeCount() { return 2; } @Override public int getItemViewType(int position) { ModelItem item = lItems.get(position); if (item.isHeader()) { return TYPE_SECTION_HEADER; } else { return TYPE_LIST_ITEM; } } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder; ModelItem item = getItem(position); if (convertView == null) { if (item.isHeader()) { convertView = mInflater.inflate(R.layout.row_item_section_header, null); holder = new ViewHolder(); holder.title = (TextView)convertView.findViewById(R.id.list_header_title); holder.subtitle = null; convertView.setTag(holder); } else { convertView = mInflater.inflate(R.layout.row_item_default, null); holder = new ViewHolder(); holder.title = (TextView)convertView.findViewById(R.id.row_item_title); holder.subtitle = (TextView)convertView.findViewById(R.id.row_item_subtitle); convertView.setTag(holder); } } else { holder = (ViewHolder) convertView.getTag(); } holder.title.setText(item.getTitle()); if (holder.subtitle != null) { holder.subtitle.setText(item.getSubtitle()); } return convertView; } private class ViewHolder { public TextView title; public TextView subtitle; public ImageView leftIcon; public View rightControl; } } 

Este es el archivo row_item_default.xml:

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" > <TextView android:id="@+id/row_item_title" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:id="@+id/row_item_subtitle" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/row_item_title" /> </RelativeLayout> 

Y este es el row_item_section_header.xml:

 <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/list_header_title" android:layout_width="fill_parent" android:layout_height="wrap_content" style="?android:attr/listSeparatorTextViewStyle" /> 

La clase ModelItem es un contenedor simple para el título, el subtítulo y un booleano para indicar si es un encabezado de sección o no.

Esta no es la única manera de escribir este adaptador, pero espero que esto ayude.

  • Cómo actualizar lista personalizada usando baseadapter en android
  • Uso de opengl para renderizar cada elemento en un listview en android
  • Android: casilla de verificación que se repite cada 10º en un listview
  • ¿Cambiar el estado del CheckBox en el elemento de lista?
  • Extender el ejemplo de AbsListView
  • Problema de menú emergente en Android ListView
  • CheckBox Hacer la listaNo se puede hacer clic en el elemento
  • No puede hacer clic en la fila listview con imagebutton
  • Lectura del archivo .txt desde un enlace compartido desde un dropbox Android studio
  • Más de 1 Urls diferentes y sólo One listview
  • ArrayAdapter - filtrado con múltiples términos de búsqueda
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.