smoothScrollToPosition after notifyDataSetChanged not working in android
I've got a custom Adapter for a ListView setup and working ok. On a button click something is changed in the underlying data, so a notifyDataSetChanged is required to refresh the ListView. Fine. But I al开发者_运维百科so want the ListView to scroll to the line where the change occurred. For this I call smoothScrollToPosition immediately after the notifyDataSetChanged. And that is not working.
If I do not call notifyDataSetChanged then the scroll works, so the notify blocks the scroll. I'm probably having a fight with events being processed in the future. Can anybody give me a pointer on what is going wrong?
Use the post()
method to wait for the list to finish updating after you call notifyDataSetChanged()
:
adapter.notifyDataSetChanged();
list.post( new Runnable() {
@Override
public void run() {
//call smooth scroll
}
});
I've tried the dmon's example code and I see it not always working.
Actually I've found another approach to perform scrolling:
adapter.notifyDataSetChanged();
channelsListView.setSelection(scrollPos); // it works without smoothScrollToPositionFromTop(..) or smoothScrollToPosition() methods call.
I found the main idea to use above method after this answer reading: https://stackoverflow.com/a/20997828/2133585
精彩评论