Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Adding Table rows Dynamically in Android

I am trying to create a layout where I need to add table rows dynamically. Below is the table layout 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> 

The activity file where rows are being added dynamically is

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

But when I run this, I am getting below error

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. 

I understand that this is due to command ll.addView(row,i); but when I remove this its adding all stuff in a single row rather tan creating a new row for next item. I tried with giving index too as row.addView(addBtn,i) but still its not populating correctly. Please advise. Thanks.

like image 242
user2416087 Avatar asked Aug 13 '13 11:08

user2416087


People also ask

How to add row Dynamically in Android?

This example demonstrates how to add table rows Dynamically in Android Layout. Step 1 − Create a new project in Android Studio, go to File ⇒ New Project and fill all required details to create a new project. Step 2 − Add the following code to res/layout/activity_main. xml.

What is table row in Android?

Tables are uniquely identified by their names and are comprised of columns and rows. Columns contain the column name, data type, and any other attributes for the column. Rows contain the records or data for the columns.


1 Answers

Create an init() function and point the table layout. Then create the needed rows and columns.

   public void init() {             TableLayout stk = (TableLayout) findViewById(R.id.table_main);             TableRow tbrow0 = new TableRow(this);             TextView tv0 = new TextView(this);             tv0.setText(" Sl.No ");             tv0.setTextColor(Color.WHITE);             tbrow0.addView(tv0);             TextView tv1 = new TextView(this);             tv1.setText(" Product ");             tv1.setTextColor(Color.WHITE);             tbrow0.addView(tv1);             TextView tv2 = new TextView(this);             tv2.setText(" Unit Price ");             tv2.setTextColor(Color.WHITE);             tbrow0.addView(tv2);             TextView tv3 = new TextView(this);             tv3.setText(" Stock Remaining ");             tv3.setTextColor(Color.WHITE);             tbrow0.addView(tv3);             stk.addView(tbrow0);             for (int i = 0; i < 25; i++) {                 TableRow tbrow = new TableRow(this);                 TextView t1v = new TextView(this);                 t1v.setText("" + i);                 t1v.setTextColor(Color.WHITE);                 t1v.setGravity(Gravity.CENTER);                 tbrow.addView(t1v);                 TextView t2v = new TextView(this);                 t2v.setText("Product " + i);                 t2v.setTextColor(Color.WHITE);                 t2v.setGravity(Gravity.CENTER);                 tbrow.addView(t2v);                 TextView t3v = new TextView(this);                 t3v.setText("Rs." + i);                 t3v.setTextColor(Color.WHITE);                 t3v.setGravity(Gravity.CENTER);                 tbrow.addView(t3v);                 TextView t4v = new TextView(this);                 t4v.setText("" + i * 15 / 32 * 10);                 t4v.setTextColor(Color.WHITE);                 t4v.setGravity(Gravity.CENTER);                 tbrow.addView(t4v);                 stk.addView(tbrow);             }          } 

Call init function in your onCreate method:

@Override     protected void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         requestWindowFeature(Window.FEATURE_NO_TITLE);         setContentView(R.layout.activity_main);          init();     } 

Layout file like:

 <ScrollView         android:id="@+id/scrollView1"         android:layout_width="fill_parent"         android:layout_height="wrap_content"         android:background="#3d455b"         android:layout_alignParentLeft="true" >          <HorizontalScrollView             android:id="@+id/hscrll1"             android:layout_width="fill_parent"             android:layout_height="wrap_content" >              <RelativeLayout                 android:id="@+id/RelativeLayout1"                 android:layout_width="fill_parent"                 android:layout_gravity="center"                 android:layout_height="fill_parent"                 android:orientation="vertical" >                  <TableLayout                     android:id="@+id/table_main"                     android:layout_width="wrap_content"                     android:layout_height="wrap_content"                     android:layout_centerHorizontal="true" >                 </TableLayout>             </RelativeLayout>         </HorizontalScrollView>     </ScrollView> 

Will look like:

enter image description here

like image 56
Vettiyanakan Avatar answered Sep 28 '22 12:09

Vettiyanakan