2014-06-05 53 views
1

這是我的佈局xml文件:編輯觀點編程中的LinearLayout

<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. 

回答

2

這兩個佈局在其中都包含一個單獨的TextView。因此,不要刪除和添加視圖,您爲什麼不切換它們之間的文本?這會節省你的時間,你的表現會更好。

+0

偉大的解決方案。 –

+0

@BhaveshJethani謝謝! – CodeWarrior

+0

嗯,不得不說,我真正在做的是使用拖放移動一個textview到另一個佈局,所以我正在做的是試圖找到方法來獲取其他textview到第一個佈局,這是,交流展位。因此,更改名稱不是一個選項 – masmic

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); 
1

您必須添加運行時的textview在linearlayout中,而不是在編譯時在xml中添加textview。


如果你在運行時添加textview,它不會給你錯誤。

linearLayout.removeAllViews(); 

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

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