我正在使用自定义ArrayAdapter来填充页面中的ListView。这是该适配器的启动代码:
public IngredientListAdapter(Context context, int layout_resourceid, ArrayList<RecipeItem> items) {
super(context, layout_resourceid);
this.items = items ;
ctx = context;
}
对于这个数组适配器,我传递一个RecipeItems数组(在我的ListRecipeItems ListActivity类中):
iAd = new IngredientListAdapter(this, R.layout.recipeitem_row, recipe.Ingredients );
this.setListAdapter(iAd) ;
但是,我发现ListView没有填充,尽管配方.Ingredients ArrayList肯定正确填充。
检查iAd.items.getCount()确认项目在那里。 我可以让ListView填充的唯一方法是使用.add()例如手动添加每个项目。
for(int i=0;i<recipe.Ingredients.size();i++)
{
iAd.add(recipe.Ingredients.get(i));
}
我的理解是在初始化时将完整数组传递给ArrayAdapter会自动填充ListView。但是,似乎永远不会调用Adapater的getView方法。
有人能否对这种行为有所了解?我对android和java很新,所以我可能错过了一些明显的东西。
非常感谢 尼克
答案 0 :(得分:1)
看起来您没有将项目传递给超类,因此ArrayAdapter对您的项目集合一无所知。在调用超类构造函数时尝试传递items作为第三个参数:
super(context, layout_resourceid, items);
答案 1 :(得分:1)
如果我在设置适配器时传递了一个ArrayList,它也不会填充。我今天早上正在处理这件事。如果我只传入一个空的ArrayList,那么执行
iAd.add(object);
然后致电
iAd.notifyDataSetChanged();
项目会显示出来。