ListView中的多个setAdapter

时间:2015-10-08 09:51:58

标签: java android methods android-arrayadapter

以下是有问题的代码:

//declarations:
private ArrayAdapter<String> listAdapter;
private ArrayAdapter<String> listAdapter2;
String [] nomi=null;
String[] famiglia=null;
private ListView mainListView;

// other code bla bla bla...

mainListView = (ListView) findViewById(R.id.listView);

// other code bla bla bla...


nomi = new String[res.size()];
for (int i = 0; i < res.size(); i++) {
    nomi[i] = res.get(i).getNomignolo();
}


famiglia= new String[res.size()];
for(int i=0; i<res.size();i++){
    famiglia[i] = res.get(i).getFamiglia();
}


ArrayList<String> listaNomi = new ArrayList<String>();
listaNomi.addAll(Arrays.asList(nomi));
ArrayList<String> listaFamiglie = new ArrayList<String>();
listaFamiglie.addAll(Arrays.asList(famiglia));





listAdapter = new ArrayAdapter<String>(HomeActivity.this, R.layout.row, R.id.button3, listaNomi);
listAdapter2 = new ArrayAdapter<String>(HomeActivity.this, R.layout.row, R.id.button6, listaFamiglie);
mainListView.setAdapter(listAdapter);
mainListView.setAdapter(listAdapter2);

它有效,但只是部分,因为当我启动应用程序时,我只能找到第二个setAdapter方法的结果。我怎样才能实现所有setAdapter方法的结果?感谢。

4 个答案:

答案 0 :(得分:0)

这是不可能的,每当您将第二个适配器设置为listview时,您的第一个适配器数据将被替换为第二个。

  

LISTVIEW可以在单一时间显示单个适配器数据。

如果要将数据从多个源显示到ListView,则首先合并所有数据,然后使用单个适配器。做类似下面的事情

dataList1 (From source A)
datalist2 (From source B)

datalist3 = dataList1 + dataList2;

setDapter(dataList3) 

答案 1 :(得分:0)

首先尝试添加第二个列表的对象

   nomi = new String[res.size()];
   for (int i = 0; i < res.size(); i++) {
     nomi[i] = res.get(i).getNomignolo() + " " +res.get(i).getFamiglia();
    }

  //list of object with name and family

创建适配器

listAdapter = new ArrayAdapter<String>(HomeActivity.this, R.layout.row, R.id.button3, listaNomi);
 mainListView.setAdapter(listAdapter);

您无法为一个列表视图设置多个适配器。

如何创建自定义数组适配器:

  public class CustomAdapter extends ArrayAdapter<Person>{
  private final Activity context;

  private ArrayList<Person> Items;
  public CustomAdapter (Activity context, int layout,ArrayList<Person> persons) {
  super(context, layout, carriers);
 // TODO Auto-generated constructor stub

 this.context = context;
 this.Items = persons;

 }

 static class ViewHolder {
  public Button name;
  public Button family;


   }

@Override
 public View getView(int position, View convertView, ViewGroup parent) {
  final ViewHolder holder;
  // Recycle existing view if passed as parameter
  // This will save memory and time on Android
  // This only works if the base layout for all classes are the same
  View rowView = convertView;
  if (rowView == null) {
    LayoutInflater inflater = context.getLayoutInflater();
    rowView = inflater.inflate(R.layout.item, null, true);

    holder = new ViewHolder();
    holder.name= (TextView) rowView.findViewById(R.id.name);
     holder.family= (TextView) rowView.findViewById(R.id.family);
    rowView.setTag(holder);
   } else {
    holder = (ViewHolder) rowView.getTag();
   }

   holder.name.setText(Items.get(position).getName());
  holder.family.setText(Items.get(position).getFamily());


  return rowView;

 }

}

并创建PErson对象:

public class PErson{ public String name; public String family;
                   public Person();
                  public String getName(){ return name;}
                  public String getFamily(){return family;}
                }

这是项目xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >

<Button
    android:id="@+id/name"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerInParent="true"
    android:text="wkjdhk"
    android:textColor="@color/green"
    android:textSize="12sp" />

<Button
    android:id="@+id/family"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:text="wkjdhk"
    android:textColor="@color/green"
    android:textSize="12sp" />
  </RelativeLayout>

这是如何从活动中打电话:
        adapter = new MyCustomAdapter(CarrierSummaryActivity.this,nomi,R.layout.item);         mainListView.setAdapter(适配器);

答案 2 :(得分:0)

你能这样做吗?

第一个清单:

ArrayList<String> a = new ArrayList<String>();
a.add("a");
a.add("b");
a.add("c");

第二个清单:

ArrayList<String> b = new ArrayList<String>();
b.add("d");
b.add("e");
b.add("f");

添加到b:

b.addAll(a);

合并两个列表:

ArrayList<String> union = new ArrayList<String>(a);
union.addAll(b);

在ListView上设置适配器:

listAdapter = new ArrayAdapter<String>(HomeActivity.this, R.layout.row, R.id.button3, union);
mainListView.setAdapter(listAdapter);

希望这会对你有所帮助。

答案 3 :(得分:0)

您应该实现自定义适配器,以便它可以像您想要的那样绘制列表。

class MyAdapter extends BaseAdapter
{
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
      //Here you can return a View with any data in any way
    }
}

希望这有帮助。