it-swarm.com.de

Listenansicht Scrollen Sie nach dem Aktualisieren der Liste an das Ende der Liste

Ich möchte sicherstellen, dass die Liste ganz nach unten gescrollt wird, nachdem ich die Listenansicht mithilfe von listAdapter aktualisiert habe, sodass das zuletzt in die Liste eingegebene Element angezeigt wird. Wie kann ich das machen ?

Ich habe es versucht, aber kein Glück:

lv.setTranscriptMode(ListView.TRANSCRIPT_MODE_ALWAYS_SCROLL);

dankeschön

283
jramirez

Angenommen, Sie wissen, wann sich die Listendaten geändert haben, können Sie die Liste manuell anweisen, nach unten zu scrollen, indem Sie die Listenauswahl auf die letzte Zeile setzen. So etwas wie:

private void scrollMyListViewToBottom() {
    myListView.post(new Runnable() {
        @Override
        public void run() {
            // Select the last row so it will scroll into view...
            myListView.setSelection(myListAdapter.getCount() - 1);
        }
    });
}
408
Mason Lee

Sie müssen diese Parameter in Ihrer Listenansicht verwenden:

  • Blättern Sie mit lv.setTranscriptMode(ListView.TRANSCRIPT_MODE_ALWAYS_SCROLL);

  • Setzt den Kopf der Liste nach unten lv.setStackFromBottom(true);

Sie können diese Parameter auch in XML einstellen, z. so was:

<ListView
   ...
   Android:transcriptMode="alwaysScroll"
   Android:stackFromBottom="true" />
234
dev.serghini

Eine Kombination von TRANSCRIPT_MODE_ALWAYS_SCROLL und setSelection hat bei mir funktioniert

ChatAdapter adapter = new ChatAdapter(this);

ListView lv = (ListView) findViewById(R.id.chatList);
lv.setTranscriptMode(AbsListView.TRANSCRIPT_MODE_ALWAYS_SCROLL);
lv.setAdapter(adapter);

adapter.registerDataSetObserver(new DataSetObserver() {
    @Override
    public void onChanged() {
        super.onChanged();
        lv.setSelection(adapter.getCount() - 1);    
    }
});
36
Wärting

Ich hatte Erfolg damit, als ich auf einen Klick auf eine Schaltfläche reagierte, also kann ich davon ausgehen, dass Sie es auch verwenden können, nachdem Sie Ihre Inhalte aktualisiert haben:

myListView.smoothScrollToPosition(theListAdapter.getCount() -1);
28
Álex

So erhalten Sie dies in einem ListFragment:

getListView().setTranscriptMode(ListView.TRANSCRIPT_MODE_ALWAYS_SCROLL); 
getListView().setStackFromBottom(true);`

Diese Antwort wurde hinzugefügt, da jemand, der mit ListFragment eine Google-Suche nach dem gleichen Problem durchführt, diese nur findet.

Grüße

10
Klatschen

Verwenden: Setzen Sie den Kopf der Liste nach unten lv.setStackFromBottom(true);

Arbeitete für mich und die Liste wird automatisch nach unten gescrollt, wenn es zum ersten Mal in Sichtbarkeit gebracht wird. Die Liste scrollt dann wie es sollte mit TRANSCRIPT_MODE_ALWAYS_SCROLL.

9
Kevin Parker

Ich benutze

setTranscriptMode(ListView.TRANSCRIPT_MODE_NORMAL);

um Einträge unten und ältere Einträge oben hinzuzufügen, scrollen Sie wie in einem Chat-Protokoll

6
Plugie

Der Transkriptionsmodus wird von Google Talk und der SMS/MMS-Anwendung verwendet. Rufen Sie notifyDatasetChanged () auf Ihrem Adapter korrekt auf, wenn Sie Elemente hinzufügen?

3
Romain Guy

Die einfachste Lösung ist:

    listView.setTranscriptMode(ListView.TRANSCRIPT_MODE_ALWAYS_SCROLL);
    listView.setStackFromBottom(true);
3
ucMedia