我有一个包含listview的xml布局。我想将布局膨胀两次,但列表视图的数据在第二个中是不同的。这里发生的是膨胀的布局只有1,它包含第二个数据集。
View view = inflater.inflate(R.layout.ingredient,null);
ingredientsView.addView(view);
final IngredientAdapter ingredientAdapter = new IngredientAdapter(this, quantityArray, itemArray, remarksArray);
listView = (ListView) findViewById(R.id.ingredientsList);
listView.setAdapter(ingredientAdapter);
view = inflater.inflate(R.layout.ingredient,null);
ingredientsView.addView(view);
final IngredientAdapter ingredientAdapter2 = new IngredientAdapter(this, quantityArray2, itemArray2, remarksArray2);
listView = (ListView) findViewById(R.id.ingredientsList);
listView.setAdapter(ingredientAdapter2);
答案 0 :(得分:0)
问题在于这些组合的代码行:
listView = (ListView) findViewById(R.id.ingredientsList); listView.setAdapter(ingredientAdapter); ... listView = (ListView) findViewById(R.id.ingredientsList); listView.setAdapter(ingredientAdapter2);
findViewById()
调用将从顶部开始遍历您的活动的视图层次结构,并返回它找到的具有匹配ID的第一个视图。因此,这两个findViewById()
调用都会返回您膨胀的第一个 ListView。您的程序设置第一个适配器,然后将第二个适配器设置为相同的ListView ,最后只看到第二个适配器的内容。
您可以通过调用该视图上的方法来指定要在findViewById()
内搜索的视图来解决此问题。所以替换第二个电话:
listView = (ListView) findViewById(R.id.ingredientsList);
代之以:
listView = (ListView) view.findViewById(R.id.ingredientsList);
由于view
是您新增的(第二个)布局,view.findViewById()
只会在新布局中进行搜索。