Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to access views inside TableLayout

In TableLayout there are 9 Buttons in a 3x3 format. How to access the text on these buttons programatically using the id of TableLayout (not Button Id) ?

like image 296
John Watson Avatar asked Jul 16 '12 12:07

John Watson


2 Answers

Use something like,

TableLayout tblLayout = (TableLayout)findViewById(R.id.tableLayout);
TableRow row = (TableRow)tblLayout.getChildAt(0); // Here get row id depending on number of row
Button button = (Button)row.getChildAt(XXX); // get child index on particular row
String buttonText = button.getText().toString();

3x3 format: (Code for understanding actual may be different)

for(int i=0;i<3;i++)
{
 TableRow row = (TableRow)tblLayout.getChildAt(i);
  for(int j=0;j<3;j++){
    Button button = (Button)row.getChildAt(j); // get child index on particular row
    String buttonText = button.getText().toString();
    Log.i("Button index: "+(i+j), buttonText);
 }
}
like image 61
user370305 Avatar answered Nov 08 '22 08:11

user370305


What you can do is find the instance of TableLayout using

TableLayout layout_tbl = (TableLayout) findViewById(R.id.layout_tbl);

then by using getChildCount() you can iterate through each child of TableLayout and TableRow, also better to check View by using instanceof so that you don't get any NPE.

for (int i = 0; i < layout_tbl.getChildCount(); i++) {
     View parentRow = layout_tbl.getChildAt(i);
     if(parentRow instanceof TableRow){
                for (int j = 0; j < parentRow.getChildCount(); j++){
                   Button button = (Button ) parentRow.getChildAt(j);
                   if(button instanceof Button){
                      String text = button.getText().toString();
                }
       }
   }
like image 28
Lalit Poptani Avatar answered Nov 08 '22 08:11

Lalit Poptani