LayoutInflater添加多个视图

3

我的应用程序需要动态创建一些带有复选框和文本视图的水平线性布局。目前我是在for循环中动态创建这些布局。为了提高性能和便利,我认为使用layoutinflater是更好的方法,因此定义一个具有正确格式的水平线性布局,然后在某种循环内添加这些布局,但我遇到了麻烦。如果有更好的实现方式(或者我的当前方式确实更好),我也很乐意尝试。

//my main layout
LinearLayout main = (LinearLayout) findViewById(R.id.main);
LayoutInflater inflate = getLayoutInflater();
//inflating the layout containing the horizontal
LinearLayout l = (LinearLayout) inflate.inflate(R.layout.inflater, main, false);
//adding the view
main.addView(l);

问题在于我无法将其放入任何类型的for循环中。以下是重复addView命令的错误日志。

12-24 19:37:18.668: E/AndroidRuntime(8780): java.lang.RuntimeException: Unable
to start activity ComponentInfo{com.example.test1/com.example.test1.MainActivity}: 
java.lang.IllegalStateException: The specified child already has a 
parent. You must call removeView() on the child's parent first.

我也考虑将布局添加到主线性布局中,然后获取它并复制它,然后再添加更多。你们能帮我学习如何做吗?

非常感谢!


为什么你不能把它放在任何一种循环中? - K-ballo
抱歉,我已经包含了我的日志记录。 - AndroidPenguin
如果您在循环中设置线性布局的ID,即l.setId(i),会发生什么? - jnthnjns
顺便说一下 - 通常将注释放在你要注释的代码行上方而不是下方。 - Squonk
1
@Asok,我确保布局方向是我首先修复的问题,因为我以前遇到过这个问题:P 但非常感谢你! - AndroidPenguin
显示剩余3条评论
1个回答

5
LinearLayout l = (LinearLayout) inflate.inflate(R.layout.inflater, main, false);

我怀疑问题在于您将main指定为ViewGroup参数。请尝试将attachToRoot参数设置为true,然后删除main.addView(l)行。或者将ViewGroup参数设置为null,并保留main.addView(l)行。请注意不要修改HTML标签。

2
第一种解决方案没有产生错误,但只添加了一个视图。第二种解决方案完美运行!:D - AndroidPenguin
@AndroidPenguin:很高兴能帮忙 - 我想其中一个会起作用,但是我记不清楚了,因为我已经有一段时间没有做过这样的事情了。 - Squonk
我简直不敢相信解决方案如此简单,以为自己完全错了或者什么的 :P 非常感谢你的帮助,Squonk。 :) - AndroidPenguin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接