How do I check when my ListView has finished redrawing?
Hopefully this can help:
- Setup an
addOnLayoutChangeListener
on the listview - Call
.notifyDataSetChanged()
; - This will fire off the
OnLayoutChangeListener
when completed - Remove the listener
Perform code on update (
getLastVisiblePosition()
in your case)mListView.addOnLayoutChangeListener(new View.OnLayoutChangeListener() { @Override public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) { mListView.removeOnLayoutChangeListener(this); Log.e(TAG, "updated"); } }); mAdapter.notifyDataSetChanged();
I think this implementation can solve the problem.
// draw ListView in UI thread
mListAdapter.notifyDataSetChanged();
// enqueue a message to UI thread
mListView.post(new Runnable() {
@Override
public void run() {
// this will be called after drawing completed
}
});