Lijstweergave Scroll naar het einde van de lijst na het bijwerken van de lijst

Ik wil er zeker van zijn dat de lijst helemaal naar beneden wordt gescrold, nadat ik de lijstweergave heb bijgewerkt met listAdapter, zodat het het laatste element dat in de lijst is ingevoerd, wordt weergegeven. Hoe kan ik dit doen?

Ik heb dit geprobeerd, maar geen geluk:

lv.setTranscriptMode(ListView.TRANSCRIPT_MODE_ALWAYS_SCROLL);

dank je


Antwoord 1, autoriteit 100%

Stel dat u weet wanneer de lijstgegevens zijn gewijzigd, dan kunt u de lijst handmatig laten scrollen naar beneden door de lijstselectie op de laatste rij in te stellen. Iets als:

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

Antwoord 2, autoriteit 56%

U moet deze parameters gebruiken in uw lijstweergave:

  • Scrollen
    lv.setTranscriptMode(ListView.TRANSCRIPT_MODE_ALWAYS_SCROLL);

  • Zet de kop van de lijst onderaan
    lv.setStackFromBottom(true);

U kunt deze parameters ook in XML instellen, bijv. zoals dit:

<ListView
   ...
   android:transcriptMode="alwaysScroll"
   android:stackFromBottom="true" />

Antwoord 3, autoriteit 9%

Een combinatie van TRANSCRIPT_MODE_ALWAYS_SCROLL en setSelection zorgde ervoor dat het voor mij werkte

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

Antwoord 4, autoriteit 7%

Ik heb dit succesvol gebruikt als reactie op een klik op een knop, dus ik denk dat u het ook kunt gebruiken nadat u uw inhoud heeft bijgewerkt:

myListView.smoothScrollToPosition(theListAdapter.getCount() -1);

Antwoord 5, autoriteit 3%

Om dit in een ListFragment te krijgen:

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

Dit antwoord toegevoegd, want als iemand op Google zoekt naar hetzelfde probleem met ListFragment, vindt hij dit gewoon..

Met vriendelijke groeten


Antwoord 6, autoriteit 2%

Gebruik:
Zet de kop van de lijst onderaan lv.setStackFromBottom(true);

Werkt voor mij en de lijst wordt automatisch naar beneden gescrold wanneer deze voor het eerst zichtbaar wordt. De lijst scrollt dan zoals het hoort met TRANSCRIPT_MODE_ALWAYS_SCROLL.


Antwoord 7

Ik gebruik

setTranscriptMode(ListView.TRANSCRIPT_MODE_NORMAL);

om items onderaan toe te voegen, en oudere items scroll naar boven, zoals een chattranscript


Antwoord 8

De eenvoudigste oplossing is:

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

Antwoord 9

De transcriptiemodus is wat je wilt en wordt gebruikt door Google Talk en de sms/mms-applicatie. Roep je notificatiesDatasetChanged() correct aan op je adapter wanneer je items toevoegt?

Other episodes