Like Mayra said, you should rethink your UI.
Unless you have multiple ListViews, I can see a solution to your problem. Since you seem to have only one list view in your scroll view. That means that you wanted to put something above or below.
You there have setHeader, setFooter. There you just have to put anything you want. You have to add theses views before setAdapter().
If you have multiple ListViews in your scrollview. I have a second solution for you. I can't really elaborate. But you'd have to create a custom adapter and override ViewTypeCount so you can handle multiple types of items. That way you can load everything you want through the adapter. And all you really need is a ListView.
If you want to handle multiple types of items (multiple listviews) here is an example "untested"
You have to subclass adapter and override getView. Habitually we should have something similar to that for view recycling
if(view == null){
//inflate view
}
In your case, you'll need to do that.
package com.neutrino.lvt;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;
public class Main extends Activity {
private ListView lv;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
lv = (ListView)findViewById(R.id.lv);
ArrayList<Items> items = new ArrayList<Items>();
items.add(new ItemA("Une"));
items.add(new ItemA("Une3"));
items.add(new ItemA("Une4"));
items.add(new ItemA("Une5"));
items.add(new ItemA("Une6"));
items.add(new ItemA("Une7"));
items.add(new ItemA("Une8"));
items.add(new ItemA("Une9"));
items.add(new ItemA("Une0"));
items.add(new ItemA("Une0-"));
items.add(new ItemB("bbb", "cc1c"));
items.add(new ItemB("bbb3", "c2cc"));
items.add(new ItemB("bbb4", "c2cc"));
items.add(new ItemB("bbb5", "c1cc"));
items.add(new ItemB("bbb6", "cc5c"));
items.add(new ItemB("bbb7", "cc4c"));
items.add(new ItemB("bbb7", "c2cc"));
items.add(new ItemB("bbb8", "c1cc"));
items.add(new ItemB("bbb9", "cc6c"));
items.add(new ItemB("bbb0", "cc8c"));
items.add(new ItemB("bbb0", "cc0c"));
items.add(new ItemB("bb3b", "cc6c"));
items.add(new ItemA("Une"));
items.add(new ItemA("Une3"));
items.add(new ItemA("Une4"));
items.add(new ItemA("Une5"));
items.add(new ItemA("Une6"));
items.add(new ItemA("Une7"));
items.add(new ItemA("Une8"));
items.add(new ItemA("Une9"));
items.add(new ItemA("Une0"));
items.add(new ItemA("Une0-"));
items.add(new ItemB("bbb6", "cc5c"));
items.add(new ItemB("bbb7", "cc4c"));
items.add(new ItemB("bbb7", "c2cc"));
items.add(new ItemB("bbb8", "c1cc"));
items.add(new ItemB("bbb9", "cc6c"));
items.add(new ItemB("bbb0", "cc8c"));
items.add(new ItemB("bbb0", "cc0c"));
items.add(new ItemB("bb3b", "cc6c"));
SpecialAdapter b = new SpecialAdapter(this, items);
lv.setAdapter(b);
}
private class SpecialAdapter extends BaseAdapter{
List<Items> list;
Context context;
public SpecialAdapter(Context context, List<Items> list) {
this.list = list;
this.context = context;
}
public Context getContext(){
return this.context;
}
@Override
public int getCount() {
return list.size();
}
@Override
public Items getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return list.get(position).hashCode();
}
@Override
public int getViewTypeCount() {
return 2;
}
@Override
public int getItemViewType(int position) {
Items b = getItem(position);
if(b instanceof ItemA){
return 0;
}else{
return 1;
}
}
@Override
public View getView(int position, View v, ViewGroup parent) {
Items o = getItem(position);
if(v == null){
LayoutInflater vi = (LayoutInflater)this.getContext()
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if(getItemViewType(position) == 0){
v = vi.inflate(
android.R.layout.simple_list_item_multiple_choice,
null
);
Log.i(this.getClass().getName(),
"Inflate two line"
);
}else{
v = vi.inflate(
android.R.layout.two_line_list_item,
null
);
Log.i(this.getClass().getName(),
"Inflate one line"
);
}
}
switch (getItemViewType(position)) {
case 0:
ItemA oa = (ItemA)o;
((TextView)v.findViewById(android.R.id.text1)).setText(oa.toString());
break;
case 1:
ItemB ob = (ItemB)o;
((TextView)v.findViewById(android.R.id.text1)).setText(ob.toString());
((TextView)v.findViewById(android.R.id.text2)).setText(ob.getClasse());
break;
}
return v;
}
}
private abstract class Items {}
private class ItemA extends Items {
String name;
public ItemA(String name) {
this.name = name;
}
@Override
public String toString() {
return "ItemA: " + name;
}
}
private class ItemB extends Items {
private String name;
private String classe;
public ItemB(String name, String classe) {
this.name = name;
this.classe = classe;
}
public String getClasse(){
return classe;
}
@Override
public String toString() {
return "ItemB: " + name;
}
}
}
I'll try to write a sample and come up with an update soon. I think I'm missing something because when views are recycled you need to check if the recycled view correspond to the ItemType. But you can definitely do it through a ListView alone. No scrollable needed.