I\'ve done all of the research on the matter. I know that Google thinks it\'s pointless and that the developers, know that it\'s not. I also know that there is no known work
Ok, as far as I got your needs I think you may just use the ListView.addFooterView(View v)
method:
http://developer.android.com/reference/android/widget/ListView.html#addFooterView(android.view.View)
It will allow you to have all your list items + "a few buttons" footer to be scrolled as a single block.
So the code should be smth like that:
import android.os.Bundle;
import android.view.LayoutInflater;
import android.widget.ArrayAdapter;
import android.widget.LinearLayout;
public class YourActivity extends ListActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LayoutInflater factory = getLayoutInflater();
LinearLayout footer =
(LinearLayout) factory.inflate(R.layout.your_a_few_buttons_footer, null);
getListView().addFooterView(footer);
String[] array = new String[50];
for (int i = 0; i < 50;) { array[i] = "LoremIpsum " + (++i); }
setListAdapter(
new ArrayAdapter<String>(this, R.layout.list_item, array)
);
}
}
Note, the doc says addFooterView()
should be called BEFORE the setListAdapter()
.
UPDATE: to add a View
at the top of the list use ListView.addHeaderView(View v)
. Note that, for instance, LinearLayout
is also a View
. So you can put anything you want as a header or a footer and it'll be scrolled with the list as an indivisible block.
Out of curiosity, is your layout using RelativeLayout? If so, calling measure(0,0)
will always throw an NPE, but a LinearLayout will not.
http://groups.google.com/group/android-developers/browse_thread/thread/5a947482d7dcb605
Change it to Linear and you can make that call. I hope that helps!
I have a situation in my app where I have paragraphs of text, imageviews, all sorts of information on a given subject...and then, depending on the item, there is possibly a ListView of comparison data in the middle of all of that info. About one in every 10 items has it, nestled between all the text. The comparison data is never more than 4 items at max, so I don't want the ListView to scroll, ever. I just want the ListView to appear in its entirety at the exact point I specify.
Adding them all as nested Linear Layouts is insane, so is using MergeAdapter to put all of that together when I may not even have a ListView on screen. And using complex ListView headers & footers is out of the question as well.
I'm not the first person to want that kind of functionality, and I won't be the last. The above solution is nearly perfect, it sizes my ListView so that it's full on screen, and all the scrolling comes from the ScrollView parent. (It's easy as sin to do on the iOS SDK, btw., and a lot of apps over there do similar things; we'll need a good solution for this.)