在linearlayout中以编程方式编辑视图

时间:2014-06-05 13:25:44

标签: java android view android-linearlayout

这是我的布局xml文件:

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <LinearLayout 
        android:id="@+id/container1"       
        android:tag="1"
        //... >

        <TextView
            android:id="@+id/txt1"
            android:tag="1"
            //... />

    </LinearLayout>

    <LinearLayout 
        android:id="@+id/container2"
        android:tag="2"
        //... >

        <TextView
            android:id="@+id/txt2"
            android:tag="2"
            //... />
    </LinearLayout>

    //...

每个容器内有2个容器和一个textview。现在,当我触摸一个按钮时,我需要容器来交换文本视图。为此,这是我的方法:

person1 = (TextView) findViewById(R.id.txt1);
person2 = (TextView) findViewById(R.id.txt2);

place1 = (LinearLayout) findViewById(R.id.place1);
place2 = (LinearLayout) findViewById(R.id.place2);

-

place1.removeView(person1);
place2.removeView(person2);

place1.addView(person2);
place2.addView(person1);

但这就是我在LogCat上的内容:

java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.

3 个答案:

答案 0 :(得分:2)

两个布局都包含一个TextView。因此,不要删除和添加视图,为什么不在它们之间切换文本?它可以节省您的时间,您的表现会更好。

答案 1 :(得分:1)

LinearLayout ll = (LinearLayout) findViewById(R.id.your_ll_id);
TextView tv = (LinearLayout) findViewById(R.id.your_tv_id);
ViewGroup parent = (ViewGroup) tv.getParent();
parent.removeView(tv);
tv.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
//...
ll.addView(tv);

答案 2 :(得分:1)

您必须在运行时在linearlayout中添加textview,而不是在编译时在xml中添加textview。


如果你在运行时添加textview,它不会给你错误。

linearLayout.removeAllViews();

final TextView person1 = new TextView(this);
linearLayout1.addView(person1);

final TextView person2 = new TextView(this);
linearLayout2.addView(person2);