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


El dedo de desplazamiento rápido desaparece mientras se desplaza AlphabetIndexer

Tengo un ListView con fastScrollAlwaysVisible y fastScrollEnabled ambos fijados a true . Después de implementar SectionIndexer a mi Adapter y un AlphabetIndexer , mi fast scroll thumb desaparecerá mientras me desplazo, luego vuelvo a aparecer una vez que llego a la parte superior o inferior de la lista. Soy bastante desorientado sobre por qué sucede esto. No lo he experimentado antes.

Todo lo que sigue funciona en lo que concierne a AlphabetIndexer . Mi pregunta es ¿por qué desaparece mi dedo de desplazamiento rápido mientras me desplazo y cómo puedo evitar que desaparezca?

No importa si el fast scroll siempre está visible. Cada vez que el fast scroll es visible, el fast scroll thumb no está allí, simplemente se ha ido y ese es mi problema. También, cuando quito el AlphabetIndexer el fast scroll thumb trabaja como lo intento para que. Todo funciona correctamente en una Activity , pero cuando carga mi ListView en un Fragment cosas terminan como explico.

Este es mi Adapter para mi ListView :

 private class AlbumsAdapter extends SimpleCursorAdapter implements SectionIndexer { private AlphabetIndexer mIndexer; // I have to override this because I'm using a `LoaderManager` @Override public Cursor swapCursor(Cursor cursor) { if (cursor != null) { mIndexer = new MusicAlphabetIndexer(cursor, mAlbumIdx, getResources().getString(R.string.fast_scroll_alphabet)); } return super.swapCursor(cursor); } @Override public Object[] getSections() { return mIndexer.getSections(); } @Override public int getPositionForSection(int section) { return mIndexer.getPositionForSection(section); } @Override public int getSectionForPosition(int position) { return 0; } } 

MusicAlphabetIndexer ayuda a ordenar correctamente la música:

 class MusicAlphabetIndexer extends AlphabetIndexer { public MusicAlphabetIndexer(Cursor cursor, int sortedColumnIndex, CharSequence alphabet) { super(cursor, sortedColumnIndex, alphabet); } @Override protected int compare(String word, String letter) { String wordKey = MediaStore.Audio.keyFor(word); String letterKey = MediaStore.Audio.keyFor(letter); if (wordKey.startsWith(letter)) { return 0; } else { return wordKey.compareTo(letterKey); } } } 

  • ¿Cómo leer los valores sin procesar de 3gp / AMR-NB formato de audio?
  • La generación de Gradle no pudo resolver la dependencia de la biblioteca aar (trnql sdk)
  • ¿Cómo se envía una matriz de objetos personalizados entre actividades?
  • Error extraño desde la actualización a Android 4.2.2 - Actividad ha filtrado IntentReceiver
  • Cómo acceder a setPreferredNetworkType en la fuente de Android
  • Google android maps api v2 Mostrar el título del marcador Siempre
  • Cómo minimizar las ocurrencias GC_FOR_ALLOC?
  • Genera un identificador único como ID de notificación de android
  • 4 Solutions collect form web for “El dedo de desplazamiento rápido desaparece mientras se desplaza AlphabetIndexer”

    Tuve un problema similar con el ícono de desplazamiento rápido del pulgar. Yo estaba investigando código fuente de Android y encontró un commit que introdujo este problema y otros (ArrayIndexOutOfBoundsException). He construido incluso el sistema Android sin este commit y funcionó entonces.

    Presenté el problema en junio: https://code.google.com/p/android/issues/detail?id=33293
    Cuando estoy leyendo sé que puedo ver que podría describir el tema mejor 🙂

    Este es el commit que está causando problemas: https://github.com/android/platform_frameworks_base/commit/32c3a6929af9d63de3bf45a61be6e1a4bde136d3

    Desafortunadamente no he encontrado ninguna solución, excepto revertir el commit, y lo dejé.
    Espero que alguien encontrará cómo solucionarlo.

    ¿Tiene fastScrollEnabled y fastScrollAlwaysVisible establecido en true ? No hay ningún atributo fastScrollAlwaysEnabled de un ListView , así que estoy pensando que tal vez sólo tienes fastScrollEnabled establecido en true, pero fastScrollAlwaysVisible se establece en su valor predeterminado, que es false .

    Puedes consultar este código:

     int currentapiVersion = android.os.Build.VERSION.SDK_INT; if (currentapiVersion <= android.os.Build.VERSION_CODES.FROYO){ // Do something for froyo and above versions list.setFastScrollEnabled(true); } else if(currentapiVersion > android.os.Build.VERSION_CODES.HONEYCOMB){ // do something for phones running an SDK before froyo list.setFastScrollEnabled(true); list.setFastScrollAlwaysVisible(true); } 

    Actividad

     import android.app.Activity; import android.content.Context; import android.database.Cursor; import android.os.Bundle; import android.widget.AlphabetIndexer; import android.widget.ListView; import android.widget.SectionIndexer; import android.widget.SimpleCursorAdapter; public class TestAct extends Activity { /** Called when the activity is first created. */ ListView test_listView; Cursor myCursor; String[] proj; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.list_app_test); TestDummyData cTestDummyData = new TestDummyData( getApplicationContext()); cTestDummyData.open(); cTestDummyData.insertRandomNames(); myCursor = cTestDummyData.fetchAllData(); test_listView = (ListView) findViewById(R.id.pager_list_test); test_listView.setFastScrollEnabled(true); test_listView.setAdapter( new MyCursorAdapter(getApplicationContext(), android.R.layout.simple_list_item_1, myCursor, new String[] { TestDummyData.KEY_NAME },// names new int[] { android.R.id.text1 }) ); cTestDummyData.close(); } class MyCursorAdapter extends SimpleCursorAdapter implements SectionIndexer { AlphabetIndexer alphaIndexer; // HashMap<String, Integer> alphaIndexer; // String[] sections; public MyCursorAdapter(Context context, int layout, Cursor c, String[] from, int[] to) { super(context, layout, c, from, to); alphaIndexer = new AlphabetIndexer(c, myCursor.getColumnIndex(TestDummyData.KEY_NAME), " ABCDEFGHIJKLMNOPQRSTUVWXYZ"); // ======optional way to get alphaindexer from data // alphaIndexer = new HashMap<String, Integer>(); // int size = items.size(); // // for (int x = 0; x < size; x++) { // String s = items.get(x); // // String ch = s.substring(0, 1); // // ch = ch.toUpperCase(); // // alphaIndexer.put(ch, x); // } // // Set<String> sectionLetters = alphaIndexer.keySet(); // // ArrayList<String> sectionList = new ArrayList<String>( // sectionLetters); // // Collections.sort(sectionList); // // sections = new String[sectionList.size()]; // // sectionList.toArray(sections); } @Override public int getPositionForSection(int section) { // TODO Auto-generated method stub return alphaIndexer.getPositionForSection(section); } @Override public int getSectionForPosition(int position) { // TODO Auto-generated method stub return alphaIndexer.getSectionForPosition(position); } @Override public Object[] getSections() { // TODO Auto-generated method stub return alphaIndexer.getSections(); } } } 

    Clase Para usar Datos Dummy Para la lista

     import java.util.Random; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.util.Log; public class TestDummyData { static final String KEY_ID = "_id"; static final String KEY_NAME = "name"; private static final String DB_NAME = "tutorial"; private static final String TABLE_NAME = "names"; private static final int DATABASE_VERSION = 1; private static final String DATABASE_CREATE = "create table " + TABLE_NAME + " (" + KEY_ID + " integer primary key autoincrement, " + KEY_NAME + " varchar not null);"; private Context context; private DatabaseHelper dbHelper; private SQLiteDatabase db; public TestDummyData(Context context) { this.context = context; this.dbHelper = new DatabaseHelper(this.context); } private static class DatabaseHelper extends SQLiteOpenHelper { DatabaseHelper(Context context) { super(context, DB_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL(DATABASE_CREATE); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { Log.v("DBUTIL", "Upgrading database from version " + oldVersion + " to " + newVersion + ", which will destroy all old data"); db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME); onCreate(db); } } public void open() { db = dbHelper.getWritableDatabase(); } public void close() { dbHelper.close(); } public void insertRandomNames() { db.execSQL("DELETE FROM " + TABLE_NAME); String s = "ANDROIDDEVELOPER"; Random r = new Random(); ContentValues values = new ContentValues(); for (int i = 0; i < 200; i++) { values.clear(); values.put(KEY_NAME, s.substring(r.nextInt(s.length()))); db.insert(TABLE_NAME, null, values); } } public Cursor fetchAllData() { return db.rawQuery("SELECT * FROM " + TABLE_NAME + " ORDER BY " + KEY_NAME + " ASC", null); } } 

    La clase anterior es datos dump clss para la tarea común … list_app_test.xml

     <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <ListView android:id="@+id/pager_list_test" android:layout_width="wrap_content" android:layout_height="wrap_content"> </ListView> </LinearLayout> 

    Usted acaba de dar test_listView.setFastScrollEnabled (true); Gvn ans whter i cn entender de ur quest.

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