webentwicklung-frage-antwort-db.com.de

Blättern Sie programmgesteuert zu einer bestimmten Position in einer Android-ListView

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.

143
Maxime

Für einen direkten Bildlauf:

getListView().setSelection(21);

Für ein reibungsloses Scrollen:

getListView().smoothScrollToPosition(21);
366
HandlerExploit

Für einen SmoothScroll mit Scroll-Dauer:

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);  
60
amalBit

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!!!

9
Melbourne Lopes

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
        }
    });
6
Inet Labs

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);
6
Zalak Gajjar

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. 

}
});
4
Xar E Ahmer

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);
4
Tot

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);

3
Vijay

es ist eine einfache list-view.set-Auswahl (Sie setzen); Sie können Ihre Position mit sharedprefrencea speichern. Wenn Sie die Aktivität .__ 

1
janatan

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);
1

-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 :)

0
Basil Rawa