Wie kann ich programmgesteuert zu einer bestimmten Position in einer ListView
scrollen?
Ich habe beispielsweise einen String[] {A,B,C,D....}
und muss das oberste sichtbare Element der ListView
auf den Index 21 meines String[]
setzen.
Für einen direkten Bildlauf:
getListView().setSelection(21);
Für ein reibungsloses Scrollen:
getListView().smoothScrollToPosition(21);
getListView().smoothScrollToPositionFromTop(position,offset,duration);
Parameter
Position -> Position, zu der gescrollt werden soll
Versatz ----> Gewünschter Abstand in Pixeln von der Oberseite der Ansicht, wenn der Bildlauf abgeschlossen ist
duration-> Anzahl der Millisekunden, die für den Bildlauf verwendet werden sollen
Anmerkung: Von API 11.
Die Antwort von HandlerExploit war genau das, wonach ich gesucht habe, aber meine Listenansicht ist ziemlich lang und auch mit Alphabet-Scroller. Dann habe ich festgestellt, dass die gleiche Funktion auch andere Parameter annehmen kann :)
Edit: (Aus AFDs Vorschlag)
So positionieren Sie die aktuelle Auswahl:
int h1 = mListView.getHeight();
int h2 = listViewRow.getHeight();
mListView.smoothScrollToPositionFromTop(position, h1/2 - h2/2, duration);
Geben Sie Ihren Code wie folgt in den Handler ein.
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);
}
und dann nennen Sie diese Methode wie,
timerDelayRunForScroll(100);
PROST!!!
Ich habe OnGroupExpandListener gesetzt und onGroupExpand () überschrieben als:
und setSelectionFromTop () -Methode verwenden, wobei das ausgewählte Element festlegt und die Auswahl der y-Pixel vom oberen Rand der ListView positioniert. (Wenn Sie sich im Touch-Modus befinden, wird das Element nicht ausgewählt, aber immer noch richtig positioniert.) (Android-Dokumente)
yourlist.setOnGroupExpandListener (new ExpandableListView.OnGroupExpandListener()
{
@Override
public void onGroupExpand(int groupPosition) {
expList.setSelectionFromTop(groupPosition, 0);
//your other code
}
});
Die Listview
-Bildlaufleiste wird standardmäßig an oberster Stelle angezeigt. Wenn Sie jedoch nicht sichtbar sind, verwenden Sie die folgende Option:
if (listView1.getFirstVisiblePosition() > position || listView1.getLastVisiblePosition() < position)
listView1.setSelection(position);
Umgang mit listView-Blättern mit UP/Down using.button
Wenn jemand daran interessiert ist, die Liste zu bearbeiten, können Sie eine Schaltfläche mit der Taste nach oben/unten anzeigen. dann.
public View.OnClickListener onChk = new View.OnClickListener() {
public void onClick(View v) {
int index = list.getFirstVisiblePosition();
getListView().smoothScrollToPosition(index+1); // For increment.
}
});
Wenn jemand nach einer ähnlichen Funktion wie Google Mail-App sucht,
Die Listview-Bildlaufleiste wird standardmäßig ganz oben angezeigt. Danke für den Tipp. amalBit . Subtrahieren Sie es einfach. Das ist 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);
Wenn Sie direkt an die gewünschte Position in einer Listenansicht springen möchten, verwenden Sie einfach
listView.setSelection (int position);
und wenn Sie in listView problemlos zur gewünschten Position springen möchten, verwenden Sie einfach
listView.smoothScrollToPosition (int position);
es ist eine einfache list-view.set-Auswahl (Sie setzen); Sie können Ihre Position mit sharedprefrencea speichern. Wenn Sie die Aktivität .__
Das hat bei mir funktioniert. Kombination von Antworten von amalBit & 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);
}
und dann rufen Sie diese Methode auf:
timerDelayRunForScroll(400);
-Wenn Sie möchten, dass die Liste nach oben\Dämmerung an eine bestimmte Position verschoben wird:
myListView.smoothScrollToPosition(i);
-wenn Sie die Position eines bestimmten Elements in myListView ermitteln möchten:
myListView.getItemAtPosition(i);
-das kann auch myListView.getVerticalScrollbarPosition(i);
Ihnen helfen.
Viel Glück :)