Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


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

  • Cómo saber qué vista dentro de un elemento ListView específico al que se hizo clic
  • ListView en ArrayAdapter orden se mezcla cuando se desplaza
  • Devolución de valores de múltiples selecciones ListView
  • Temas de Android ListView
  • Horizontal RecyclerView dentro de ListView sin desplazamiento muy suave
  • ListAdapter Filtro que no sea el uso de cadenas?
  • Reproducción de audio desde URI Dentro de ListView, pero Seekbar no se está actualizando en el elemento ListView de Android
  • Android listviews: vistas de encabezado y pie de página
  • 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.

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.