0

textview を子としてリニア レイアウトに追加しようとしていますが、例外が発生します。これは xml ファイルです。

<?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)

この問題を解決する方法がわかりません。助けてください。よろしくお願いします。

4

5 に答える 5

3

TextView l_tempTextループ内で再作成する必要があります。同じインスタンスを使用して、テキストを変更して追加することはできません。まったく新しいオブジェクトでなければなりません。

すべてのl_tempTextコードをループに移動すると、機能するはずです。

于 2012-12-21T14:51:13.087 に答える
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);
}
于 2012-12-21T14:50:02.403 に答える
2

l_tempText は「for」ステートメントで作成する必要があります

    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);
    }
于 2012-12-21T14:55:46.823 に答える
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:orientation2番目のレイアウトでパラメータを忘れました

于 2012-12-21T14:49:41.930 に答える
0

LinearLayout を削除しているため、例外が発生します

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

そして、同じ LinearLayout に何かを追加しようとしています

sideIndex.addView(l_tempText);

また、TextView の同じインスタンスがループ内で何度も使用されます。

于 2012-12-21T14:51:19.950 に答える