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 :

  • Android scrollview horizontal se comportan como el iPhone (paginación)
  • Obtener ID de fila de una tabla SQLite FTS3
  • Cómo calcular la distancia basada en la aceleración del teléfono
  • Creación de un parche 9 dibujable en tiempo de ejecución
  • Android: Cómo controlar la intensidad de la señal WiFi
  • ¿Cómo puedo enfocar una vista de acción plegable Editar elemento de texto en la barra de acción (cuando se expande) y forzar el teclado virtual a abrir?
  •  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

  • Práctica recomendada para el almacenamiento en caché de archivos en Android
  • Diferencia entre las API de destino de Google y el objetivo de Android
  • La construcción de hormigas falla dentro de Eclipse
  • Anotaciones perdidas.jar
  • ¿Cómo agregar un interruptor a la barra de acción de Android?
  • Motor de juegos multiplataforma 2D para Android e iOS?
  • 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.