首页 > 解决方案 > 使用循环将多个视图添加到 RelativeLayout

问题描述

我正在尝试将多个视图添加到我在 xml 中声明的 RelativeLayout。循环是唯一的方法,因为我不知道需要添加多少元素,因为大小是动态的。但我得到了这个错误。

java.lang.IllegalStateException:指定的孩子已经有一个父母。您必须首先在孩子的父母上调用 removeView()。

代码:

View inf = getActivity().getLayoutInflater().inflate(R.layout.item_table_edit, null);
RelativeLayout.LayoutParams layoutParamss = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
for (int i = 0; i < putzones.size(); i++) {
        inf.setX((float) putzones.get(i).getPosX());
        inf.setY((float) putzones.get(i).getPosY());
        addMap.addView(inf, layoutParamss);
}

这里有什么问题,因为当我尝试通过单击项目来添加视图时,它使用相同的代码,没有任何错误。当我通过单击没有循环的项目添加时,代码是相同的。提前致谢。

标签: androidandroid-relativelayout

解决方案


您必须在每个循环的迭代中创建 item_table_edit 的新实例。

RelativeLayout.LayoutParams layoutParamss = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
for (int i = 0; i < putzones.size(); i++) {
        View inf = getActivity().getLayoutInflater().inflate(R.layout.item_table_edit, null);
        inf.setX((float) putzones.get(i).getPosX());
        inf.setY((float) putzones.get(i).getPosY());
        addMap.addView(inf, layoutParamss);
}

推荐阅读