2011-10-11 51 views

Respuesta

4

No hay nada como eso en Android que tiene que crear una vista personalizada Pruebe desde iphone-uitable-view-in-android y sideindex-for-android. He usado el código de estos dos enlaces para crear una lista de iphone con alfabetos en el costado.

+0

Muchas gracias por su valiosa respuesta, estoy usando sideindex-for-android, funciona bien, pero no puedo descargar iphone-uitable-view-in-android. –

+0

Creo que el segundo enlace será suficiente para crear una lista con alfabetos en el lateral. En los encabezados de los segundos enlaces para cada alfabetos no están en la lista, puede crear un encabezado para cada alfabeto usando este enlace http://jsharkey.org/blog/2008/08/18/separating-lists-with-headers-in-android- 09/o https://github.com/commonsguy/cw-advandroid/tree/master/ListView. – anujprashar

+0

bien, estoy seguro, gracias una vez más. –

0

no hay nada como eso en Android (excepto los contactos de Samsung Consulte)

el valor por defecto en Android está utilizando listview con desplazamiento rápido, como la lista de contactos nativa

+0

¿Hay alguna vista de lista personalizada de esa manera. –

+0

¿de qué estás hablando? –

1

El código en sideindex-for-android es más complejo de lo que necesita ser.

Creé LinearLayout como ese ejemplo y agregué instancias de TextView para las letras. Pero luego los hice cliqueables.

En mi onClick(), veo si es una de estas vistas y obtengo el texto de ella.

Cuando cargué mi lista, configuré un diccionario en el cursoradapter. El método setSelection() obtiene el desplazamiento de este diccionario.

public static final String alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 

public Map<String, Integer> getAlphabetOffsets() { 

    HashMap<String, Integer> map = new HashMap<>(); 

    // First initialize the dictionary with all of the letters of the alphabet. 
    // 
    for (int idx = 0; idx < alphabet.length(); idx++) { 
     String aLetter = alphabet.substring(idx, idx+1); 
     map.put(aLetter, -1); 
    } 

    int numFound = cursor.getCount(); 

    cursor.moveToFirst(); 

    // Now go through the products' first initials and, when an initial has not been 
    // found, set the offset for that letter. 
    // 
    for (int idx = 0; idx < numFound; idx++) { 

     String productName = cursor.getString(cursor.getColumnIndex(DB.PRODUCTS_NAME_COL)); 

     String current; 

     if (productName == null || productName.equals("")) { 
      current = "0"; 
     } else { 
      current = productName.substring(0, 1).toUpperCase(); 
     } 

     // By the way, what do we do if a product name does not start with a letter or number? 
     // 
     // For now, we will ignore it. We are only putting 0-9 and A-Z into the side index. 
     // 
     if (map.containsKey(current) && map.get(current) < 0) 
      map.put(current, idx); 

     cursor.moveToNext(); 
    } 

    map.put("0", 0); 

    int lastFound = 0; 

    /* 
    Now we deal with letters in the alphabet for which there are no products. 

    We go through the alphabet again. If we do not have an offset for a letter, 
    we use the offset for the previous letter. 

    For example, say that we do not have products that start with "B" or "D", we 
    might see: 

      { "9" = 0, "A" = 1, "B" = -1, "C" = 5, "D" = -1, "E" = 10 } 

    After this runs, will we have: 

      { "9" = 0, "A" = 1, "B" = 1, "C" = 5, "D" = 5, "E" = 10 } 

    This is so if we click on B, we see the list starting a "A" and see that 
    there are no "B" products. 

    */ 
    for (int idx = 0; idx < alphabet.length(); idx++) { 

     String current = alphabet.substring(idx, idx+1); 

     if (map.get(current) < 0) { 
      map.put(current, lastFound); 
     } else { 
      lastFound = map.get(current); 
     } 
     System.out.println("alphabet \"" + current + "\" = " + map.get(current)); 
    } 

    return map; 
} 
Cuestiones relacionadas