¿Cómo funciona el desplazamiento rápido en un Android ListView?

Android ListView, explica lo siguiente,

  • Cómo crear un ListView que muestra una lista de elementos (en nuestro ejemplo, mostramos una lista de frutas).
  • Cómo habilitar el desplazamiento rápido en ListView
  • Cómo personalizar los atributos de estilo de desplazamiento rápido como, Desplazamiento rápido del pulgar dibujable Color de texto de desplazamiento rápido Pista de desplazamiento rápido dibujable Fondo de vista previa de desplazamiento rápido

Cree un nuevo proyecto de Android y asígnele el nombre ” AndroidFastScrollDemo “.

Recursos

colores.xml

Cree un nuevo archivo res / values ​​/ colors.xml y copie y pegue el siguiente contenido.

# DA4A38

strings.xml

Abra res / values ​​/ strings.xml y edite para tener el contenido como se muestra a continuación.

AndroidFastScrollDemo

Configuración

¡Hola mundo!

Manzanas

Albaricoques

Aguacate

Annona

Plátano

Arándano

Blackberry

Chirimoya

Clementina

Cantalope

Coco

Grosella

Cereza

Cherimoya

Fecha

Damson

Durian

Saúco

Fig

Feijoa

Pomelo

Uva

Grosella espinosa

Guayaba

Melón Honeydew

Huckleberry

Jackfruit

Baya de enebro

Jambul

Azufaifa

Kiwi

Kumquat

Limones

Limas

Lychee

Mango

mandarín

Mangostina

Nectaraine

Naranja

Oliva

Ciruelas pasas

Peras

Ciruela

Piña

Melocotón

Papaya

Fruta de la pasión

Granada

Pomelo

Frambuesas

Melón de roca

Rambután

Fresas

Cariño

Salmonberry

Satsuma

Mandarinas

Tomate

Ugli

Sandía

Woodapple

Archivos de diseño

activity_main.xml

Este archivo de diseño XML ( activity_main.xml ) se usa para definir ListView
Abra el archivo activity_main.xml en res / layout y copie el siguiente contenido.

<RelativeLayout xmlns: android = "http://schemas.android.com/apk/r…"

xmlns: tools = “http://schemas.android.com/tools”

android: layout_width = “match_parent”

android: layout_height = “match_parent”

android: padding = “5dp”

herramientas: contexto = “. MainActivity”>

<ListView

android: id = “@ android: id / list”

android: layout_width = “fill_parent”

android: layout_height = “fill_parent”

android: scrollbarStyle = “outsideOverlay” />

list_item.xml

Este archivo de diseño XML ( list_item.xml ) se usa para mostrar un elemento particular de ListView. Contiene un único TextView.
Cree un nuevo archivo list_item.xml en res / layout y copie el siguiente contenido.

<TextView xmlns: android = "http://schemas.android.com/apk/r…"

android: id = “@ + id / txt_title”

android: layout_width = “fill_parent”

android: layout_height = “fill_parent”

android: paddingBottom = “10dp”

android: paddingLeft = “15dp”

android: paddingTop = “10dp” />

styles.xml

Abra res / values ​​/ styles.xml y edite para tener el contenido como se muestra a continuación. Aquí, se definen los atributos de estilo de desplazamiento rápido.

@ drawable / fastscroll_thumb_holo

atThumb

@ color / apptheme_color

@ drawable / fastscroll_thumb_pressed_holo

@ drawable / bg_default_focused_holo_light

fastscroll_thumb_holo.xml

Cree un nuevo archivo fastscroll_thumb_holo.xml en res / drawable / y copie el siguiente contenido. Define el selector para el pulgar de desplazamiento rápido para estados predeterminados y presionados.

Archivos fuente

Clase ListAdapter

Cree una nueva clase ” ListAdapter ” en el paquete com.androidopentutorials.fastscrolldemo.adapter .

  • Esta es la clase de adaptador ListView personalizada que implementa SectionIndexer para permitir el desplazamiento rápido entre secciones de un AbsListView. Una sección es un grupo de elementos de la lista que tienen algo en común. Por ejemplo, pueden comenzar con la misma letra o pueden ser canciones del mismo artista. SectionIndexer proporciona los siguientes métodos,

getPositionForSection (int section) devuelve la posición inicial (primera) de esa sección con el adaptador de lista

getSectionForPosition (int position) devuelve el índice de la sección correspondiente dentro de la matriz de objetos de sección en esa posición dada

getSections () devuelve una matriz de objetos que representan secciones de la lista.

paquete com.androidopentutorials.fastscrolldemo.adapter;

import java.util.ArrayList;

import java.util.Collections;

importar java.util.HashMap;

import java.util.LinkedHashMap;

import java.util.List;

import java.util.Locale;

import java.util.Set;

importar android.content.Context;

importar android.util.Log;

importar android.widget.ArrayAdapter;

importar android.widget.SectionIndexer;

import com.androidopentutorials.fastscrolldemo.R;

La clase pública ListAdapter extiende ArrayAdapter implementa SectionIndexer {

HashMap mapIndex;

Secciones de cadena [];

Lista de frutas ;

public ListAdapter (contexto de contexto, List fruitList) {

super (contexto, R.layout.list_item, fruitList);

this.fruits = fruitList;

mapIndex = new LinkedHashMap ();

for (int x = 0; x <fruits.size (); x ++) {

Cadena fruit = fruits.get (x);

Cadena ch = fruit.substring (0, 1);

ch = ch.toUpperCase (http://Locale.US);

// HashMap evitará duplicados

mapIndex.put (ch, x);

}

Establecer sectionLetters = mapIndex.keySet ();

// crea una lista del conjunto para ordenar

ArrayList sectionList = new ArrayList (sectionLetters);

Log.d (“sectionList”, sectionList.toString ());

Collections.sort (sectionList);

secciones = nueva Cadena [sectionList.size ()];

sectionList.toArray (secciones);

}

public int getPositionForSection (sección int) {

Log.d (“sección”, “” + sección);

return mapIndex.get (secciones [sección]);

}

public int getSectionForPosition (int position) {

Log.d (“posición”, “” + posición);

devuelve 0;

}

Objeto público [] getSections () {

secciones de retorno;

}

}

Actividad principal

Esta es la clase de actividad principal. Para habilitar el desplazamiento rápido en ListView, siga los siguientes pasos,

  • Establezca el modo de desplazamiento rápido en su ListViewlistViewInstance.setFastScrollEnabled (verdadero);
  • Haga que su adaptador implemente la interfaz android.widget.SectionIndexer y anule los métodos para ver una letra del alfabeto en la que se encuentra actualmente durante el desplazamiento rápido.

paquete com.androidopentutorials.fastscrolldemo;

import java.util.Arrays;

import java.util.Collections;

import java.util.List;

importar android.app.ListActivity;

importar android.os.Bundle;

importar android.view.Menu;

importar android.view.View;

importar android.widget.AdapterView;

importar android.widget.AdapterView.OnItemClickListener;

importar android.widget.ListView;

importar android.widget.Toast;

import com.androidopentutorials.fastscrolldemo.adapter.ListAdapter;

clase pública MainActivity extiende ListActivity {

ListView fruitView;

@Anular

public void onCreate (Bundle savedInstanceState) {

super.onCreate (savedInstanceState);

setContentView (R.layout.activity_main);

fruitView = (ListView) findViewById (http: //android.R.id.list);

fruitView.setFastScrollEnabled (verdadero);

Cadena [] frutas = getResources (). GetStringArray (R.array.fruits_array);

Lista fruitList = Arrays.asList (frutas);

Collections.sort (fruitList);

setListAdapter (nuevo ListAdapter (this, fruitList));

fruitView.setOnItemClickListener (nuevo OnItemClickListener () {

public void onItemClick (AdapterView parent, View arg1,

posición int, arg3 largo) {

Toast.makeText (getApplicationContext (),

“” + parent.getItemAtPosition (posición),

Toast.LENGTH_LONG) .show ();

}

});

}

@Anular

public boolean onCreateOptionsMenu (Menú del menú) {

getMenuInflater (). inflate (R.menu.main, menú);

volver verdadero;

}

}

  • La matriz de cadenas se recupera de strings.xml. Creamos una instancia de ListAdapter que implementa SectionIndexer y establecemos esto en ListView.

Salida

Haga clic para obtener más actualizaciones de Android

¿Cómo usar el desplazamiento rápido en Android?

Hay un interruptor aquí, que se puede habilitar a través de XML o Java. Elige tu opción.

Editar: veo que quieres saber cómo sucede tan rápido. Supongo que la mejor opción para usted sería buscar en la fuente AOSP para ListView para la implementación exacta. El primer paso en esto quizás sería dibujar todo el ListView de arriba a abajo en un búfer de tamaño apropiado, ya que cualquier parte de ella sería necesaria para ser dibujada en la pantalla. El chip de gráficos en el móvil se puede usar después de esto para representar la porción adecuada. Estos son los pasos principales que puedo pensar fuera de mi cabeza. Me encantaría saber más de mí mismo.