Hide footer view in ListView?
I have a ListView
. The data behind it is fetched from the Internet, in sets of 10-30 items whenever the user scrolls all the way to the bottom. In order to indicate that it is loading more items, I used addFooterView()
to add a simple view that displays a "Loading..." message and a spinner. Now, when I'm out of data (no more data to fetch), I want to hide that message. I tried to do:
loadingView.setVisibility(View.GONE);
Unfortunately, while that does hide the view, it leaves space for it. I.e. I end up with a big blank space where the "Loading" message used to be. How can I go about properly hiding this view?
I can't use removeFooterView()
because I may need to show it again, in which case I can't call addFooterView()
again because an adapter has already been set on the ListView
, and you can't call addHeaderView()
/ addFooterView()
after setting an adapter.
Solution 1:
It seems that you are allowed to call addHeaderView()
/ addFooterView()
after setAdapter()
as long as you call one of those methods at least once before. That is a rather poor design decision from Google, so I filed an issue. Combine this with removeFooterView()
and you have my solution.
+1 for the other two answers I got, they're valid (and arguably more correct) solutions. Mine, however, is the simplest, and I like simplicity, so I'll mark my own answer as accepted.
Solution 2:
Try setting the footer's height to 0px or 1px before hiding it. Alternatively, wrap the footer view in a wrap_content
height FrameLayout
and hide/show the inner view, leaving the FrameLayout
visible; the height should wrap properly then.