问题版
它已经在一个单独的xml(tablet_shortterm_column.xml)中,见上文。
无论如何,似乎logcat抱怨rlo_shortterm_col已经有了父级,所以它不会允许另一个ptr_rlo_rght_middle.addView(rlo_shortterm_col)。毫无意义。
我在这个问题上花了这么多时间,仍然无法解决。有人可以帮我一把吗?提前谢谢。
我有一个xml文件(tablet_shortterm_column.xml),它包含我需要重复使用的RelativeLayout,一次又一次。有时很多次在同一个屏幕上一个接一个地水平堆叠。我试图将一个插入现有的RelativeLayout(即一个在另一个内。)
// exerpts
public class TabletMain extends Activity {
setContentView(R.layout.tablet_main);
public RelativeLayout ptr_rlo_rght_middle;
ptr_rlo_rght_middle = (RelativeLayout) findViewById(R.id.rlo_rght_middle);
//rlo_rght_middle is in tablet_main.xml
LayoutInflater inflater =
(LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View llo_tmp = (View) inflater.inflate(R.layout.tablet_shortterm_column,null);
RelativeLayout rlo_tmp = (RelativeLayout) llo_tmp.findViewById(R.id.rlo_shortterm_col);
// rlo_shortterm_col is the object I want to reuse it a RelativeLayout and is inside
// tablet_shortterm_column.xml
RelativeLayout.LayoutParams rlo_layoutparams;
rlo_layoutparams = new RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.WRAP_CONTENT,
RelativeLayout.LayoutParams.WRAP_CONTENT);
rlo_layoutparams.addRule(RelativeLayout.RIGHT_OF, R.id.llo_rght_middle_col1);
// llo_rght_middle_col1 is a RelativeLayout inside tablet_main.xml,
// I want to put another RelativeLayout view right next to it.
rlo_tmp.setLayoutParams(rlo_layoutparams);
ptr_rlo_rght_middle.addView(rlo_tmp); //Application crashes right on this line.
} //end Activity
// * ** * ** * ** * ** * ** * ** * ** tablet_shortterm_column.xml的内容
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<RelativeLayout
android:id="@+id/rlo_shortterm_col"
android:layout_width="180dp"
android:layout_height="fill_parent"
android:background="#436699"
android:orientation="vertical"
android:layout_margin="3px"
android:weightSum="1"
> <!-- android:background="#32CD32" android:layout_height="365dp" android:layout_margin="30px" -->
<Button
android:id="@+id/btn_shortterm_col"
android:layout_alignParentTop="true"
android:text="Tuesday Afternoon"
android:layout_margin="15px"
android:textSize="12px"
android:textColor="#FFFFFF"
android:layout_width="wrap_content"
android:layout_gravity="center_horizontal"
android:background="#296699"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
> <!--android:background="#32CD32" -->
</Button>
<ImageView
android:id="@+id/iv_shortterm_col"
android:layout_below="@+id/btn_shortterm_col"
android:src="@drawable/tblet_icon14_med"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
><!-- android:src="@drawable/tblet_shape1" android:layout_gravity="center_horizontal" -->
</ImageView>
<TextView
android:id="@+id/tv_shortterm_col1"
android:layout_below="@+id/iv_shortterm_col"
android:text="-10ºC"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="10px"
android:background="#DCDCDC"
android:textColor="#000000"
android:textSize="12px"
android:layout_centerHorizontal="true"
> <!-- android:layout_gravity="center_horizontal" -->
</TextView>
<TextView
android:id="@+id/tv_shortterm_col2"
android:layout_below="@+id/tv_shortterm_col1"
android:text="Flurries"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="10px"
android:background="#DCDCDC"
android:textColor="#000000"
android:textSize="12px"
android:layout_centerHorizontal="true"
>
</TextView>
<RelativeLayout
android:id="@+id/rlo_shortterm_col_1"
android:layout_below="@+id/tv_shortterm_col2"
android:src="@drawable/tblet_shape2"
android:background="#32CD32"
android:layout_height="113dp"
android:layout_margin="40px"
android:layout_width="125dp"
> <!--android:background="#32CD32" android:orientation="vertical" -->
</RelativeLayout>
</RelativeLayout>
</LinearLayout>
答案 0 :(得分:0)
为RelativeLayout创建一个单独的xml文件,然后根据需要多次充气。
答案 1 :(得分:0)
llo_tmp是您尝试重用的RelativeLayout
的父视图。因此,您无法将其添加到另一个ViewGroup
,并且您会收到该logcat错误。
您可以从xml文件中删除LinearLayout
内容并以相同的方式对xml文件进行膨胀(尽管可能不是返回View
而是返回RelativeLayout
)。您不应该必须更改大部分java代码,因为引用仍然是相同的。
或者,快速修复可能是将llo_tmp添加到ViewGroup
而不是rlo_tmp。无论哪种方式,rlo_tmp已经有一个父级,无法重用。由于您没有填充整个屏幕宽度的布局,因此您可能不希望这样。