【发布时间】:2013-12-15 12:43:15
【问题描述】:
我的层次结构是这样的:
- 线性布局(水平)
- 图像视图
- 线性布局(垂直)
- 文本视图
- 文本视图
- 文本视图
- 文本视图
我希望能够通过迭代添加上面的层次结构,只要有可以从数据库中获取的数据(使用Parse)
我尝试将 ImageView 和 LinearLayout 放在父 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:
<LinearLayout
android:id="@+id/new_linearLayoutOuter"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@color/white"
android:orientation="horizontal" >
<ImageView
android:id="@+id/new_imageViewPP"
android:layout_width="55dp"
android:layout_height="55dp"
android:layout_marginLeft="14dp"
android:layout_marginTop="12dp"
android:background="@color/black"
android:contentDescription="@string/pp" />
<LinearLayout
android:id="@+id/new_linearLayoutInner"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@color/white"
android:orientation="vertical" >
<TextView
android:id="@+id/new_textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/movie_title"
android:paddingTop="10dp"
android:paddingLeft="7dp"
android:textSize="15sp" /> <!-- Title of the movie -->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/review_by"
android:paddingTop="3dp"
android:paddingLeft="7dp"
android:textSize="12sp" /> <!-- By -->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/movie_stars"
android:paddingTop="3dp"
android:paddingLeft="7dp"
android:textSize="12sp" /> <!-- Rating and date -->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/sample_string"
android:maxLines="5"
android:scrollbars="vertical"
android:paddingTop="10dp"
android:paddingLeft="7dp"
android:textSize="12sp"
android:layout_gravity="center_vertical|right" /> <!-- Review content -->
</LinearLayout>
</LinearLayout>
【问题讨论】:
-
首先,交换内部和外部布局的方向。另外,您所说的 是什么意思“似乎不起作用。” 您什么都没有看到,或者您看到了某些东西但没有看到其他人?
-
我已经相应地编辑了方向。它不会启动应用程序,而是突然关闭。 LogCat 中记录了以下错误:“指定的孩子已经有一个父母。您必须先在孩子的父母上调用 removeView()。”
-
我认为您在 XML 文件中已经有了
hierarchy。你尝试重新创建它。那就是问题所在。请也发布您的 XML .. -
所以要动态加载的视图不应该在 XML 中定义/创建?有没有办法可以重用它们,比如迭代?我添加了我的 XML。请参见上文。
-
关于这个错误,视图应该执行类似
((ViewGroup) IV.getParent()).removeView(IV);的操作以在使用newParent.addView(IV)添加到newParent 之前离开旧父级。
标签: java android android-layout android-linearlayout