tutorial studio obtener example editar dinamico desplegable datos con cargar android android-listview

studio - Desplazarse por programación a una posición específica en un ListView de Android



listview dinamico android studio (11)

¿Cómo puedo desplazarme programáticamente a una posición específica en un ListView ?

Por ejemplo, tengo un String[] {A,B,C,D....} , y necesito establecer el elemento visible superior de ListView en el índice 21 de mi String[] .


Manejo del desplazamiento de ListView usando UP / Down usando.button

Si alguien está interesado en manejar la lista, vea una fila arriba / abajo con el botón. entonces.

public View.OnClickListener onChk = new View.OnClickListener() { public void onClick(View v) { int index = list.getFirstVisiblePosition(); getListView().smoothScrollToPosition(index+1); // For increment. } });


Para un SmoothScroll con duración de desplazamiento:

getListView().smoothScrollToPositionFromTop(position,offset,duration);

Parámetros
posición -> Posición para desplazarse a
desplazamiento ----> distancia deseada en píxeles de posición desde la parte superior de la vista cuando finaliza el desplazamiento
duración-> Número de milisegundos para usar para el desplazamiento

Nota: de API 11.

La respuesta de HandlerExploit fue lo que estaba buscando, pero mi lista de lista es bastante larga y también con el desplazamiento alfabético. Luego descubrí que la misma función puede tomar otros parámetros también :)

Editar: (De la sugerencia de AFD)

Para colocar la selección actual:

int h1 = mListView.getHeight(); int h2 = listViewRow.getHeight(); mListView.smoothScrollToPositionFromTop(position, h1/2 - h2/2, duration);


Configuré OnGroupExpandListener y anulé onGroupExpand () como:

y use el método setSelectionFromTop () que establece el elemento seleccionado y coloca la selección y los píxeles en el borde superior de ListView. (Si está en modo táctil, el elemento no se seleccionará, pero seguirá estando correctamente colocado) (documentos de android)

yourlist.setOnGroupExpandListener (new ExpandableListView.OnGroupExpandListener() { @Override public void onGroupExpand(int groupPosition) { expList.setSelectionFromTop(groupPosition, 0); //your other code } });


El desplazamiento de Listview colocará en la parte superior de forma predeterminada, pero desea desplazarse si no está visible y luego usar esto:

if (listView1.getFirstVisiblePosition() > position || listView1.getLastVisiblePosition() < position) listView1.setSelection(position);


Encontré esta solución para permitir el desplazamiento hacia arriba y hacia abajo usando dos botones diferentes.

Como lo sugiere @Nepster, implemento el desplazamiento programáticamente utilizando getFirstVisiblePosition () y getLastVisiblePosition () para obtener la posición actual.

final ListView lwresult = (ListView) findViewById(R.id.rds_rdi_mat_list); ..... if (list.size() > 0) { ImageButton bnt = (ImageButton) findViewById(R.id.down_action); bnt.setVisibility(View.VISIBLE); bnt.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if(lwresult.getLastVisiblePosition()<lwresult.getAdapter().getCount()){ lwresult.smoothScrollToPosition(lwresult.getLastVisiblePosition()+5); }else{ lwresult.smoothScrollToPosition(lwresult.getAdapter().getCount()); } } }); bnt = (ImageButton) findViewById(R.id.up_action); bnt.setVisibility(View.VISIBLE); bnt.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if(lwresult.getFirstVisiblePosition()>0){ lwresult.smoothScrollToPosition(lwresult.getFirstVisiblePosition()-5); }else{ lwresult.smoothScrollToPosition(0); } } }); }


Esto es lo que funcionó para mí. Combinación de respuestas por amalBit y Melbourne Lopes

public void timerDelayRunForScroll(long time) { Handler handler = new Handler(); handler.postDelayed(new Runnable() { public void run() { try { int h1 = mListView.getHeight(); int h2 = v.getHeight(); mListView.smoothScrollToPositionFromTop(YOUR_POSITION, h1/2 - h2/2, 500); } catch (Exception e) {} } }, time); }

y luego llama a este método como:

timerDelayRunForScroll(400);


Para un desplazamiento directo:

getListView().setSelection(21);

Para un desplazamiento suave:

getListView().smoothScrollToPosition(21);


Ponga su código en el controlador de la siguiente manera,

public void timerDelayRunForScroll(long time) { Handler handler = new Handler(); handler.postDelayed(new Runnable() { public void run() { try { lstView.smoothScrollToPosition(YOUR_POSITION); } catch (Exception e) {} } }, time); }

y luego llama a este método como,

timerDelayRunForScroll(100);

¡¡¡ACLAMACIONES!!!


Si alguien está buscando una funcionalidad similar, como la aplicación Gmail,

El desplazamiento Listview se colocará en la parte superior de forma predeterminada. Gracias por la pista. amalBit. Solo restarlo. Eso es.

Handler handler = new Handler(); handler.postDelayed(new Runnable() { @Override public void run() { int h1 = mDrawerList.getHeight(); int h2 = header.getHeight(); mDrawerList.smoothScrollToPosition(h2-h1); } }, 1000);


Si quiere saltar directamente a la posición deseada en una lista, solo use

listView.setSelection (int position);

y si quieres saltar suavemente a la posición deseada en la lista solo usa

listView.smoothScrollToPosition (int position);


su fácil selección list-view.set (usted pos); o puede guardar su posición conpreferencia compartida y cuando comienza la actividad obtiene preferencias y setseletion a esa int