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


La barra de desplazamiento desaparece cuando se utiliza SectionIndexer en secciones específicas de HoneyComb

Estoy utilizando el adaptador para ListView que implementa SectionIndexer . ListView tiene fastScrollEnabled configurado como true en el archivo xml. Todo funciona bien en Android 2.2 y 2.3, pero cuando pruebo mi aplicación en una tableta con Android 3.0, en algunas secciones barra de desplazamiento desaparece. Por ejemplo, cuando desplazo la lista hacia abajo, en los elementos que comienzan con letras, la barra de desplazamiento AB está visible, pero para las letras CH no es, y luego después de H nuevamente visible.

Este adaptador se hace para clasificar el contenido alfabéticamente en ListView para poder utilizar fastscroll.

La aplicación está diseñada para API Nivel 8, por lo que no podría utilizar fastScrollAlwaysVisible.

Aquí está un código de mi adaptador:

 public class AlphabetSimpleAdapter extends SimpleAdapter implements SectionIndexer { private HashMap<String, Integer> charList; private String[] alphabet; public Typeface tfSansMedium; public Context mContext; public int mResource; public int[] mTo; public List<? extends Map<String, ?>> mData; public String mTitleKey; public AlphabetSimpleAdapter(Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to, String titleKey /* key sent in hashmap */) { super(context, data, resource, from, to); mData = data; mTitleKey = titleKey; mContext = context; mResource = resource; mTo = new int[to.length]; for ( int i = 0; i < to.length; i ++) { mTo[i] = to[i]; } charList = new HashMap<String, Integer>(); int size = data.size(); tfSansMedium = Typeface.createFromAsset(context.getAssets(), "fonts/VitesseSans-Medium.otf"); for(int i = 0; i < size; i++) { // Parsing first letter of hashmap element String ch = data.get(i).get(titleKey).toString().substring(0, 1); ch = ch.toUpperCase(); if(!charList.containsKey(ch)) { charList.put(ch, i); // Using hashmap to avoid duplicates } } Set<String> sectionLetters = charList.keySet(); // A set of all first letters ArrayList<String> sectionList = new ArrayList<String>(sectionLetters); // Creating arraylist to be able to sort elements Collections.sort(sectionList, Collator.getInstance(new Locale("pl", "PL"))); // Sorting elements alphabet = new String[sectionList.size()]; sectionList.toArray(alphabet); } // Methods required by SectionIndexer @Override public View getView(int position, View convertView, ViewGroup parent) { View v = convertView; if (v == null) { LayoutInflater li = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); v = li.inflate(mResource, null); } for (int i = 0; i < mTo.length; i ++) { TextView tv = (TextView)v.findViewById(mTo[i]); if (tv != null) tv.setTypeface(tfSansMedium); } return super.getView(position, v, parent); } @Override public int getPositionForSection(int section) { if(!(section > alphabet.length-1)) { return charList.get(alphabet[section]); } else { return charList.get(alphabet[alphabet.length-1]); } } @Override public int getSectionForPosition(int position) { return charList.get(mData.get(position).get(mTitleKey).toString().substring(0, 1)); } @Override public Object[] getSections() { return alphabet; } } 

charList es un HashMap donde charList letras con su último índice que aparece así que cuando tengo 6 elementos empezando con la letra "A", el valor de la clave "A" es 5 y así sucesivamente.

alphabet es un array String con todas las primeras letras existentes.

One Solution collect form web for “La barra de desplazamiento desaparece cuando se utiliza SectionIndexer en secciones específicas de HoneyComb”

Yo estaba enfrentando el mismo problema. Acabo de dar mi versión mínima de SDK como 8 y traget como 16 y escribió el código de abajo. Y todo funcionó bien.

  int currentapiVersion = android.os.Build.VERSION.SDK_INT; if (currentapiVersion <= android.os.Build.VERSION_CODES.FROYO){ // Do something for froyo and above versions fblist.setFastScrollEnabled(true); } else if(currentapiVersion > android.os.Build.VERSION_CODES.HONEYCOMB){ // do something for phones running an SDK before froyo fblist.setFastScrollEnabled(true); fblist.setFastScrollAlwaysVisible(true); } 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.