所以这就是问题所在。我正在编写一个应用程序来查询Web服务以获取某些数据。返回的数据是任意数量的字符串。
我需要显示这些字符串的列表,这显然最容易通过将ListView嵌套在其他ListView中来完成。这是一个ListView,其行包含其他ListViews。我遇到的问题是,当我这样做时,内部ListViews只显示支持数组中的第一个元素。
我正在使用扩展BaseAdapter的自定义ListAdapter。使用Eclipse调试器我已经能够确定每个实例的getView(int,View,viewGroup)方法(嵌套ListView中每一行一个)总是被调用三次,但总是使用相同的int-argument (即0)。调用ListAdapter的getView()的次数似乎与支持数组包含的元素数量没什么关系。
我创建了一个相当简单的测试应用程序来说明我实际在做什么。
这是我的ListAdapter。另一个ListAdapter,嵌套的InnerListAdapter用于填充内部列表。
package org.my.tests;
import java.util.List;
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;
public class NestedListAdapter extends BaseAdapter {
Context context;
List<List<String>> list;
public NestedListAdapter(Context context, List<List<String>> list) {
this.context = context;
this.list = list;
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ListView view = new ListView(context);
view.setAdapter(new InnerListAdapter(list.get(position)));
return view;
}
public class InnerListAdapter extends BaseAdapter {
List<String> list;
public InnerListAdapter(List<String> list) {
this.list = list;
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
TextView view = new TextView(context);
view.setText(String.valueOf(position) + ' ' + list.get(position));
return view;
}
}
}
这是我的Activity-class的代码:
package org.my.tests;
import java.util.ArrayList;
import java.util.List;
import android.app.ListActivity;
import android.os.Bundle;
public class ListViewTest extends ListActivity {
private static final List<List<String>> lists = new ArrayList<List<String>>(3);
static {
List<String> list = new ArrayList<String>(2);
list.add("a");
list.add("b");
lists.add(list);
list = new ArrayList<String>(2);
list.add("c");
list.add("d");
lists.add(list);
list = new ArrayList<String>(2);
list.add("e");
list.add("f");
lists.add(list);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.list_view_test);
setListAdapter(new NestedListAdapter(this, lists));
}
}
实际应用程序中使用的自定义ListAdapter要复杂得多,并且对嵌套的ListView使用布局膨胀。但结果是一样的。
有没有人对如何解决此问题有任何想法,以显示每个内部列表中的两个元素?
答案 0 :(得分:1)
为什么你不使用ExpandableListActivity与他们的ExpandableListView和ExpandableListAdapter,如果你使用它们,已经有了方法:getChild,getGroup你可以为父母和孩子建立不同的视图......