2012-12-21 22 views
0

我想TextView的儿童添加到线性布局,但越来越exception.This是XML文件:获取例外,同时增加孩子的LinearLayout

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="@drawable/buttonswoodytexturebg" 
    android:orientation="vertical" > 

    <LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" > 

     <Button 
      android:id="@+id/OkButton" 
      android:layout_width="0dip" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:text="Ok" /> 

     <Button 
      android:id="@+id/AddContactButton" 
      android:layout_width="0dip" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:text="Add new Contact" /> 
    </LinearLayout> 

    <LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:orientation="horizontal" > 

     <ListView 
      android:id="@+id/listViewSetRule" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:layout_margin="2dip" 
      android:cacheColorHint="#00000000" 
      android:choiceMode="multipleChoice" /> 
     <!-- android:smoothScrollbar="false" --> 

     <ListView 
      android:id="@+id/listViewUpdateRule" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:layout_margin="2dip" 
      android:cacheColorHint="#00000000" 
      android:choiceMode="multipleChoice" /> 

     <LinearLayout 
      android:id="@+id/sideIndex" 
      android:layout_width="40dip" 
      android:layout_height="fill_parent" 
      android:background="@color/black" 
      android:gravity="center_horizontal" 
      android:orientation="vertical" > 
     </LinearLayout> 
    </LinearLayout> 

</LinearLayout> 

我在这里想给孩子添加到其线性布局ID sideIndex使用此代码:

@Override 
    public void onWindowFocusChanged(boolean hasFocus) 
    { 
     super.onWindowFocusChanged(hasFocus); 

     LinearLayout sideIndex = (LinearLayout)ShowTheContacts1.this.findViewById(R.id.sideIndex); 
     sideIndexHeight = sideIndex.getHeight(); 

     ((ViewGroup)sideIndex.getParent()).removeView(sideIndex); 

     TextView l_tempText = new TextView(ShowTheContacts1.this); 
     l_tempText.setGravity(Gravity.CENTER); 
     l_tempText.setTextSize(20); 
     LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, 1); 
     l_tempText.setLayoutParams(params); 

     for(int l_a = 0;l_a < m_arrayOfAlphabets.length;l_a++) 
     { 
      l_tempText.setText(m_arrayOfAlphabets[l_a]); 
      sideIndex.addView(l_tempText); 
     } 
    } 

我在这行越来越异常:sideIndex.addView(l_tempText);这是logcat的:

12-21 20:08:06.291: E/AndroidRuntime(19007): java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first. 
12-21 20:08:06.291: E/AndroidRuntime(19007): at android.view.ViewGroup.addViewInner(ViewGroup.java:1861) 
12-21 20:08:06.291: E/AndroidRuntime(19007): at android.view.ViewGroup.addView(ViewGroup.java:1756) 
12-21 20:08:06.291: E/AndroidRuntime(19007): at android.view.ViewGroup.addView(ViewGroup.java:1713) 
12-21 20:08:06.291: E/AndroidRuntime(19007): at android.view.ViewGroup.addView(ViewGroup.java:1693) 
12-21 20:08:06.291: E/AndroidRuntime(19007): at com.velosys.smsManager.Activities.ShowTheContacts1.onWindowFocusChanged(ShowTheContacts1.java:1335) 
12-21 20:08:06.291: E/AndroidRuntime(19007): at com.android.internal.policy.impl.PhoneWindow$DecorView.onWindowFocusChanged(PhoneWindow.java:1969) 
12-21 20:08:06.291: E/AndroidRuntime(19007): at android.view.View.dispatchWindowFocusChanged(View.java:3731) 
12-21 20:08:06.291: E/AndroidRuntime(19007): at android.view.ViewGroup.dispatchWindowFocusChanged(ViewGroup.java:657) 
12-21 20:08:06.291: E/AndroidRuntime(19007): at android.view.ViewRoot.handleMessage(ViewRoot.java:1819) 
12-21 20:08:06.291: E/AndroidRuntime(19007): at android.os.Handler.dispatchMessage(Handler.java:99) 
12-21 20:08:06.291: E/AndroidRuntime(19007): at android.os.Looper.loop(Looper.java:123) 
12-21 20:08:06.291: E/AndroidRuntime(19007): at android.app.ActivityThread.main(ActivityThread.java:4363) 
12-21 20:08:06.291: E/AndroidRuntime(19007): at java.lang.reflect.Method.invokeNative(Native Method) 
12-21 20:08:06.291: E/AndroidRuntime(19007): at java.lang.reflect.Method.invoke(Method.java:521) 
12-21 20:08:06.291: E/AndroidRuntime(19007): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) 
12-21 20:08:06.291: E/AndroidRuntime(19007): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 
12-21 20:08:06.291: E/AndroidRuntime(19007): at dalvik.system.NativeStart.main(Native Method) 

我不知道如何提前解决这个problem.Please帮助me.Thanks。

+0

任何形式的帮助将是appreciated.Thanks – user1726619

回答

3

你需要在循环中重新TextView l_tempText。你不能使用同一个实例,改变文本并添加它,它必须是一个全新的对象。

全部移动l_tempText代码进入循环,它应该工作。

+0

感谢您的帮助。 – user1726619

+0

2分钟后会接受你的答案,因为你答案更快。 – user1726619

0
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="@drawable/buttonswoodytexturebg" 
    android:orientation="vertical" > 

    <LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" > 

你在第二个布局忘记android:orientation PARAM

+0

这不能解决错误。 – cjk

+0

感谢提醒我,但我认为这不是例外的原因。 – user1726619

2

您正在尝试多次添加相同的对象。

for(int l_a = 0;l_a < m_arrayOfAlphabets.length;l_a++) 
{ 
    l_tempText.setText(m_arrayOfAlphabets[l_a]); 
    sideIndex.addView(l_tempText); 
} 

l_tempText每次都要创建:

for(int l_a = 0;l_a < m_arrayOfAlphabets.length;l_a++) 
{ 
    TextView l_tempText = new TextView(ShowTheContacts1.this); 
    l_tempText.setGravity(Gravity.CENTER); 
    l_tempText.setTextSize(20); 
    LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, 1); 
    l_tempText.setLayoutParams(params); 
    l_tempText.setText(m_arrayOfAlphabets[l_a]); 
    sideIndex.addView(l_tempText); 
} 
+0

是的,这是问题的原因。感谢您的帮助。 – user1726619

0

你得到的例外,因为你要删除的LinearLayout

((ViewGroup)sideIndex.getParent()).removeView(sideIndex); 

然后尝试添加一些相同的LinearLayout

sideIndex.addView(l_tempText); 

同样的TextView的同一个实例是用来一遍又一遍的循环。

2

l_tempText应在创建“为”语句

LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT, 1); 
    TextView l_tempText = null; 
    for(int l_a = 0;l_a < m_arrayOfAlphabets.length;l_a++) 
    { 
    l_tempText = new TextView(ShowTheContacts1.this); 
    l_tempText.setGravity(Gravity.CENTER); 
    l_tempText.setTextSize(20); 
    l_tempText.setLayoutParams(params); 
    l_tempText.setText(m_arrayOfAlphabets[l_a]); 
    sideIndex.addView(l_tempText); 
    }