如何在列表视图中多次展开布局但使用不同的数据?

时间:2018-01-11 15:09:50

标签: java android android-layout

我有一个包含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);

1 个答案:

答案 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()只会在新布局中进行搜索。