2

我想为此从同一个 xml 资源创建多个按钮我正在创建我在 xml 文件中定义按钮的 am xml 布局

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

    <Button
            android:id="@+id/inputbox"
            style="@style/textstyle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@drawable/inputbox"
            android:text="B" />

</LinearLayout>

然后在代码中我使用我在xml中定义的按钮创建多个按钮代码是这样的

View view = inputboxview.findViewById(R.id.inputbox);
        ((ViewGroup) view.getParent()).removeView(view);

        //Add input boxes in control view
        for(int i=0; i<guess_world.length(); i++)
        {
            Button inputbox = new Button(context);
            //Drawable image = context.getResources().getDrawable(R.drawable.inputbox); 
            //inputbox.setBackgroundDrawable(image);
            //inputbox.set
            inputbox = (Button) view;
            inputbar.addView(inputbox);
        }

现在的问题是,当我创建一个按钮时它工作正常,但是当我创建超过 1 个按钮时,它给了我例外

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

所以,请我在这。

4

2 回答 2

0

我们无法猜测您的“输入栏”对象是什么,因此我们不知道您在哪里添加视图。

你可以做的是,假设你的容器有 id=@+id/container 并且是一个线性布局:

LinearLayout container = (LinearLayout) findViewById(R.id.container);

for(int i=0; i<guess_world.length(); i++)
        {
            Button inputbox = new Button(context); //or inflate from xml
            inputbox.setId(i);
            // TODO: set width and height using LayoutParameters
            container.addView(inputbox);
        }
于 2013-10-02T13:16:06.793 回答
0

该错误是正常的,正如它所说,每个视图只能添加一次。

将您的按钮 XML 移动到一个单独的文件中,然后对其进行膨胀并将其添加到您的 for 循环内的 LinearLayout 中。

于 2013-10-01T14:03:04.137 回答