I would like to make sure that the list is scrolled all the way to the bottom, after I have updated the listview by using listAdapter, so that it displays the last element entered in the list. How can I do this ?
I tried this but no luck:
lv.setTranscriptMode(ListView.TRANSCRIPT_MODE_ALWAYS_SCROLL);
thank you
Using :
Set the head of the list to it bottom lv.setStackFromBottom(true);
Worked for me and the list is scrolled to the bottom automatically when it is first brought into visibility. The list then scrolls as it should with TRANSCRIPT_MODE_ALWAYS_SCROLL
.
I've had success using this in response to a button click, so I guess that you can use it too after updating your contents:
myListView.smoothScrollToPosition(theListAdapter.getCount() -1);
To get this in a ListFragment:
getListView().setTranscriptMode(ListView.TRANSCRIPT_MODE_ALWAYS_SCROLL);
getListView().setStackFromBottom(true);`
Added this answer because if someone do a google search for same problem with ListFragment he just finds this..
Regards
I use
setTranscriptMode(ListView.TRANSCRIPT_MODE_NORMAL);
to add entries at the bottom, and older entries scroll off the top, like a chat transcript
You need to use these parameters in your list view:
Scroll
lv.setTranscriptMode(ListView.TRANSCRIPT_MODE_ALWAYS_SCROLL);
Set the head of the list to it bottom
lv.setStackFromBottom(true);
You can also set these parameters in XML, eg. like this:
<ListView
...
android:transcriptMode="alwaysScroll"
android:stackFromBottom="true" />
The transcript mode is what you want and is used by Google Talk and the SMS/MMS application. Are you correctly calling notifyDatasetChanged() on your adapter when you add items?
A combination of TRANSCRIPT_MODE_ALWAYS_SCROLL and setSelection made it work for me
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);
}
});
The simplest solution is :
listView.setTranscriptMode(ListView.TRANSCRIPT_MODE_ALWAYS_SCROLL);
listView.setStackFromBottom(true);
Source: Stackoverflow.com