在Android中动态添加表行

我正在尝试创建一个布局,在该布局中我需要动态添加表行。下面是表格布局xml


<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:id="@+id/displayLinear"

    android:background="@color/background_df"

    android:orientation="vertical" >


         <TableRow

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:id="@+id/display_row"

            android:layout_marginTop="280dip" >


</TableLayout>

动态添加行的活动文件是


public void init(){

    menuDB = new MenuDBAdapter(this);

    ll = (TableLayout) findViewById(R.id.displayLinear);


    TableRow row=(TableRow)findViewById(R.id.display_row);

    for (int i = 0; i <2; i++) {


        checkBox = new CheckBox(this);

        tv = new TextView(this);

        addBtn = new ImageButton(this);

        addBtn.setImageResource(R.drawable.add);

        minusBtn = new ImageButton(this);

        minusBtn.setImageResource(R.drawable.minus);

        qty = new TextView(this);

        checkBox.setText("hello");

        qty.setText("10");

        row.addView(checkBox);

        row.addView(minusBtn);

        row.addView(qty);

        row.addView(addBtn);

        ll.addView(row,i);


    }

}

但是当我运行它时,我得到了错误


08-13 16:27:46.437: E/AndroidRuntime(23568): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.roms/com.example.roms.DisplayActivity}: java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.

我知道这是由于命令引起的,ll.addView(row,i);但是当我删除它时,将所有内容添加到一行中,而不是为下一项创建新行。我也尝试提供索引,row.addView(addBtn,i)但仍然无法正确填充。请指教。谢谢。


浮云间
浏览 1171回答 3
3回答

白衣非少年

正如Fredigato所说,您还可以在一个单独的Layout文件中声明一个RelativeLayout。然后使用以下方法实例化它:for(int i = 0; i < 6; i ++){LayoutInflater inflater = (LayoutInflater)getApplicationContext().getSystemService&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; (Context.LAYOUT_INFLATER_SERVICE);RelativeLayout row = (RelativeLayout) inflater.inflate(R.layout.table_view,null);&nbsp; &nbsp; &nbsp; &nbsp; quizesTableLayout.addView(row,i);}通过这种方法,您可以轻松地使用XML设计一个自定义行并重用它。现在,为了能够在实例化的RelativeLayout中更改子视图。您可以调用row.childAt(index)。因此,假设您在RelativeLayout中有一个TextView,则可以使用:TextView tv = (TextView) row.childAt(0);tv.setText("Text");
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Android