Come posso scorrere programmaticamente fino a una posizione specifica in un ListView
?
Ad esempio, ho un String[] {A,B,C,D....}
e devo impostare l'elemento visibile in alto ListView
dell'indice sull'indice 21 del mio String[]
.
Come posso scorrere programmaticamente fino a una posizione specifica in un ListView
?
Ad esempio, ho un String[] {A,B,C,D....}
e devo impostare l'elemento visibile in alto ListView
dell'indice sull'indice 21 del mio String[]
.
Risposte:
Per uno scorrimento diretto:
getListView().setSelection(21);
Per uno scorrimento uniforme:
getListView().smoothScrollToPosition(21);
smoothScrollToPosition
non funziona, qualche suggerimento?
listView.post(() -> listView.smoothScrollToPosition());
getListView().smoothScrollToPositionFromTop(position,offset,duration);
Posizione parametri -> Posizione per scorrere fino
all'offset ----> Distanza desiderata in pixel della posizione dalla parte superiore della vista al termine dello scorrimento-
> Numero di millisecondi da utilizzare per lo scorrimento
Nota: dall'API 11.
La risposta di HandlerExploit era ciò che stavo cercando, ma la mia lista è piuttosto lunga e anche con lo scroller alfabetico. Poi ho scoperto che la stessa funzione può accettare anche altri parametri :)
Modifica: (dal suggerimento AFD)
Per posizionare la selezione corrente:
int h1 = mListView.getHeight();
int h2 = listViewRow.getHeight();
mListView.smoothScrollToPositionFromTop(position, h1/2 - h2/2, duration);
Inserisci il codice nel gestore come segue,
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);
}
e quindi chiama questo metodo come
timerDelayRunForScroll(100);
SALUTI!!!
Ho impostato OnGroupExpandListener e sovrascrivo onGroupExpand () come:
e utilizzare il metodo setSelectionFromTop () che imposta l'elemento selezionato e posiziona la selezione y pixel dal bordo superiore di ListView. (Se in modalità touch, l'elemento non verrà selezionato ma verrà comunque posizionato in modo appropriato.) (Documenti Android)
yourlist.setOnGroupExpandListener (new ExpandableListView.OnGroupExpandListener()
{
@Override
public void onGroupExpand(int groupPosition) {
expList.setSelectionFromTop(groupPosition, 0);
//your other code
}
});
Lo Listview
scorrimento sarà posizionato in alto per impostazione predefinita, ma vuoi scorrere se non è visibile quindi usa questo:
if (listView1.getFirstVisiblePosition() > position || listView1.getLastVisiblePosition() < position)
listView1.setSelection(position);
Se qualcuno cerca una funzionalità simile come l'app Gmail,
Lo scorrimento Listview verrà posizionato in alto per impostazione predefinita. Grazie per il suggerimento. amalBit. Sottrailo e basta. Questo è tutto.
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);
Elenco di gestione Visualizza lo scorrimento utilizzando il pulsante SU / Giù utilizzando il pulsante
Se qualcuno è interessato a gestire l'elenco Visualizza una riga su / giù usando il pulsante. poi.
public View.OnClickListener onChk = new View.OnClickListener() {
public void onClick(View v) {
int index = list.getFirstVisiblePosition();
getListView().smoothScrollToPosition(index+1); // For increment.
}
});
Questo è ciò che ha funzionato per me. Combinazione di risposte di amalBit e 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);
}
e quindi chiama questo metodo come:
timerDelayRunForScroll(400);
la sua facile selezione list-view.set (tu pos); oppure puoi salvare la tua posizione con sharedprefrenceand quando inizi l'attività ottieni preferenze e imposta elemosina a quell'int
-Se vuoi solo che l'elenco scorra verso l'alto \ alba fino a una posizione specifica:
myListView.smoothScrollToPosition(i);
-se desideri ottenere la posizione di un elemento specifico in myListView:
myListView.getItemAtPosition(i);
-anche questo myListView.getVerticalScrollbarPosition(i);
può aiutarti.
In bocca al lupo :)
Sono necessari due elementi per definire con precisione la posizione di scorrimento di un elenco Visualizza:
Per ottenere l'elenco corrente Visualizzare la posizione di scorrimento:
int firstVisiblePosition = listView.getFirstVisiblePosition();
int topEdge=listView.getChildAt(0).getTop(); //This gives how much the top view has been scrolled.
Per impostare l'elenco Visualizza la posizione di scorrimento:
listView.setSelectionFromTop(firstVisiblePosition,0);
// Note the '-' sign for scrollTo..
listView.scrollTo(0,-topEdge);
Ho trovato questa soluzione per consentire lo scorrimento su e giù usando due diversi pulsanti.
Come suggerito da @Nepster, implemento lo scorrimento a livello di codice usando getFirstVisiblePosition () e getLastVisiblePosition () per ottenere la posizione corrente.
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);
}
}
});
}