使用多个视图以编程方式/动态创建LinearLayout

我有一个像这样的层次结构:

  • 的LinearLayout(水平)
    • ImageView的
    • 的LinearLayout(垂直)
      • 的TextView
      • 的TextView
      • 的TextView
      • 的TextView

我希望能够通过迭代添加上面的层次结构,只要有数据可以从数据库中获取(使用Parse )

我已经尝试在父LinearLayout下放置ImageView和LinearLayout但它似乎不起作用。 这是我在MainActivity.Java中的代码:

LinearLayout LL_Outer = (LinearLayout) findViewById(R.id.new_linearLayoutOuter); LL_Outer.setOrientation(LinearLayout.VERTICAL); // set orientation LL_Outer.setBackgroundColor(color.white); // set background // set Layout_Width and Layout_Height LinearLayout.LayoutParams layoutForOuter = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT); LL_Outer.setLayoutParams(layoutForOuter); LinearLayout LL_Inner = (LinearLayout) findViewById(R.id.new_linearLayoutInner); LL_Inner.setOrientation(LinearLayout.HORIZONTAL); LL_Inner.setBackgroundColor(color.white); LinearLayout.LayoutParams layoutForInner = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT); LL_Inner.setLayoutParams(layoutForInner); //LL_Outer.addView(LL_Inner); ImageView IV = (ImageView) findViewById(R.id.new_imageViewPP); //IV.getLayoutParams().height = 55; //IV.getLayoutParams().width = 55; LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); params.setMargins(14, 12, 0, 0); params.height = 55; params.weight = 55; IV.setBackgroundColor(color.black); IV.setLayoutParams(params); LL_Inner.addView(IV); LL_Outer.addView(LL_Inner); 

我不知道我哪里出错了,因为我的代码没有提示任何错误。 请帮忙。

编辑:我已经相应地编辑了方向,当我运行应用程序时,它停止工作。 并在LogCat中提示错误,指出“指定的子节点已经有父节点。您必须首先在子节点的父节点上调用removeView()。

这是我的XML:

              

Solutions Collecting From Web of "使用多个视图以编程方式/动态创建LinearLayout"

您想以编程方式获得该层次结构

- LinearLayout(horizontal) - ImageView - LinearLayout(vertical) - TextView - TextView - TextView - TextView

好吧,让我们从Parent LinearLayout开始

 LinearLayout parent = new LinearLayout(context); parent.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)); parent.setOrientation(LinearLayout.HORIZONTAL); //children of parent linearlayout ImageView iv = new ImageView(context); LinearLayout layout2 = new LinearLayout(context); layout2.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)); parent.setOrientation(LinearLayout.VERTICAL); parent.addView(iv); parent.addView(layout2); //children of layout2 LinearLayout TextView tv1 = new TextView(context); TextView tv2 = new TextView(context); TextView tv3 = new TextView(context); TextView tv4 = new TextView(context); layout2.addView(tv1); layout2.addView(tv2); layout2.addView(tv3); layout2.addView(tv4); 

你完成了:)

问题是因为视图已添加到XML文件中的布局中。 然后你findfindViewById (find它们)并尝试再次将它们添加到布局中。 这就是为什么应用程序崩溃抱怨,视图已经有父,你不能再添加它。

在XML文件中,LinearLayout已经有了子视图。 因此不需要在代码中添加它们。