将ArrayListAdapter与ListView一起使用

时间:2010-08-17 15:29:12

标签: android listview android-widget

我正在使用自定义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很新,所以我可能错过了一些明显的东西。

非常感谢 尼克

2 个答案:

答案 0 :(得分:1)

看起来您没有将项目传递给超类,因此ArrayAdapter对您的项目集合一无所知。在调用超类构造函数时尝试传递items作为第三个参数:

super(context, layout_resourceid, items);

答案 1 :(得分:1)

如果我在设置适配器时传递了一个ArrayList,它也不会填充。我今天早上正在处理这件事。如果我只传入一个空的ArrayList,那么执行

iAd.add(object); 

然后致电

iAd.notifyDataSetChanged();

项目会显示出来。