How do I get values from a dynamically created android TableRow?

17,404

Solution 1

I guess you're talking about getting those values on a TableRow click. If this is the case you could add a listener to your TableRow and use getChildAt to get a hold of the two TextViews and get the data:

//...
tr.setOnClickListener(new View.OnClickListener() {
   public void onClick(View view) {
      TableRow t = (TableRow) view;
      TextView firstTextView = (TextView) t.getChildAt(0);
      TextView secondTextView = (TextView) t.getChildAt(1);
      String firstText = firstTextView.getText().toString();
      String secondText = secondTextView.getText().toString();
   }
});
//...

Solution 2

To get data from textview first u need to identify its parent from that u need to get your textView child position then u can get data from it... Here is a sample

 String myText;
((TextView) findViewById(R.id.tv)).setOnClickListener(new OnClickListener() {
  @Override
 public void onClick(View v) {                          
   TableRow tablerow = (TableRow)v.getParent();
   TextView items = (TextView) tablerow.getChildAt(2);

   myText = items.getText().toString();
  }
 });
Share:
17,404
Aerrow
Author by

Aerrow

Mobile Application Developer

Updated on June 24, 2022

Comments

  • Aerrow
    Aerrow almost 2 years

    I used the code below to create a TableRow with content dynamically. It works good but I wish to get the values in the TableRow. Here is the sample code (I got it from Google), it has two text values in the TableRow. When I click the TableRow at any position it gives the corresponding value in the TableRow (I wish something similar to a ListView).

    All_CustomsActivity.java

    public class All_CustomsActivity extends Activity {
    
        String companies[] = { "Google", "Windows", "iPhone", "Nokia", "Samsung",
                "Google", "Windows", "iPhone", "Nokia", "Samsung", "Google",
                "Windows", "iPhone", "Nokia", "Samsung" };
        String os[] = { "Android", "Mango", "iOS", "Symbian", "Bada", "Android",
                "Mango", "iOS", "Symbian", "Bada", "Android", "Mango", "iOS",
                "Symbian", "Bada" };
    
        TableLayout tl;
        TableRow tr;
        TableRow mTable = null;
        TextView companyTV, valueTV;
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            tl = (TableLayout) findViewById(R.id.maintable);
            // addHeaders();
            addData();
    
        }
    
        /** This function add the headers to the table **/
        public void addHeaders() {
    
            /** Create a TableRow dynamically **/
            tr = new TableRow(this);
            tr.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,
                    LayoutParams.WRAP_CONTENT));
    
            /** Creating a TextView to add to the row **/
            TextView companyTV = new TextView(this);
            companyTV.setText("Companies");
            companyTV.setTextColor(Color.GRAY);
            companyTV.setTypeface(Typeface.DEFAULT, Typeface.BOLD);
            companyTV.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,
                    LayoutParams.WRAP_CONTENT));
            companyTV.setPadding(5, 5, 5, 0);
            tr.addView(companyTV); // Adding textView to tablerow.
    
            /** Creating another textview **/
            TextView valueTV = new TextView(this);
            valueTV.setText("Operating Systems");
            valueTV.setTextColor(Color.GRAY);
            valueTV.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,
                    LayoutParams.WRAP_CONTENT));
            valueTV.setPadding(5, 5, 5, 0);
            valueTV.setTypeface(Typeface.DEFAULT, Typeface.BOLD);
            tr.addView(valueTV); // Adding textView to tablerow.
    
            // Add the TableRow to the TableLayout
            tl.addView(tr, new TableLayout.LayoutParams(LayoutParams.FILL_PARENT,
                    LayoutParams.WRAP_CONTENT));
    
            // we are adding two textviews for the divider because we have two
            // columns
            tr = new TableRow(this);
            tr.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,
                    LayoutParams.WRAP_CONTENT));
    
            /** Creating another textview **/
            TextView divider = new TextView(this);
            divider.setText("-----------------");
            divider.setTextColor(Color.GREEN);
            divider.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,
                    LayoutParams.WRAP_CONTENT));
            divider.setPadding(5, 0, 0, 0);
            divider.setTypeface(Typeface.DEFAULT, Typeface.BOLD);
            tr.addView(divider); // Adding textView to tablerow.
    
            TextView divider2 = new TextView(this);
            divider2.setText("-------------------------");
            divider2.setTextColor(Color.GREEN);
            divider2.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,
                    LayoutParams.WRAP_CONTENT));
            divider2.setPadding(5, 0, 0, 0);
            divider2.setTypeface(Typeface.DEFAULT, Typeface.BOLD);
            tr.addView(divider2); // Adding textView to tablerow.
    
            // Add the TableRow to the TableLayout
            tl.addView(tr, new TableLayout.LayoutParams(LayoutParams.FILL_PARENT,
                    LayoutParams.WRAP_CONTENT));
        }
    
        /** This function add the data to the table **/
        public void addData() {
    
            for (int i = 0; i < companies.length; i++) {
                /** Create a TableRow dynamically **/
                tr = new TableRow(this);
                tr.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,
                        LayoutParams.WRAP_CONTENT));
                // ImageView im = new ImageView(this);
                // im.setBackgroundResource(R.drawable.sample_image);
                // im.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,
                // LayoutParams.WRAP_CONTENT));
                // tr.addView(im);
                /** Creating a TextView to add to the row **/
                companyTV = new TextView(this);
                companyTV.setText(companies[i]);
                companyTV.setTextColor(Color.RED);
                companyTV.setTypeface(Typeface.DEFAULT, Typeface.BOLD);
                companyTV.setLayoutParams(new LayoutParams(
                        LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
                companyTV.setPadding(5, 5, 5, 5);
                tr.addView(companyTV); // Adding textView to tablerow.
    
                /** Creating another textview **/
                valueTV = new TextView(this);
                valueTV.setText(os[i]);
                valueTV.setTextColor(Color.GREEN);
                valueTV.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,
                        LayoutParams.WRAP_CONTENT));
                valueTV.setPadding(5, 5, 5, 5);
                valueTV.setTypeface(Typeface.DEFAULT, Typeface.BOLD);
                tr.addView(valueTV); // Adding textView to tablerow.
    
                // Add the TableRow to the TableLayout
                tl.addView(tr, new TableLayout.LayoutParams(
                        LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
    
                // tr.setOnClickListener(new View.OnClickListener() {
                // public void onClick(View view) {
                // view.setBackgroundColor(Color.DKGRAY);
                // }
                // });
                //
                // tr.setOnLongClickListener(new View.OnLongClickListener() {
                // public boolean onLongClick(View v) {
                // mTable = (TableRow) v; // assign selected TableRow gobally
                // openContextMenu(v);
                // return true;
                // }
                // });
    
            }
        }
    
        // @Override
        // public void onCreateContextMenu(ContextMenu menu, View v,
        // ContextMenu.ContextMenuInfo menuInfo) {
        // super.onCreateContextMenu(menu, v, menuInfo);
        // menu.add(0, v.getId(), 0, "Do YourStuff");
        //
        // }
        //
        // @Override
        // public boolean onContextItemSelected(MenuItem item) {
        // int ccount = (mTable).getChildCount();
        // String[] str = new String[ccount];
        // for (int i = 0; i < ccount; i++) {
        // TextView tv = (TextView) (((TableRow) mTable)).getChildAt(i);
        // str[i] = tv.getText().toString(); // set selected text data into the
        // // String array
        // }
        // Toast.makeText(All_CustomsActivity.this, Arrays.toString(str), 2)
        // .show();
        // return true;
        // }
    
    }
    

    main.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/LinearLayout01"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" >
    
        <ScrollView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:scrollbars="none" >
    
            <TableLayout
                android:id="@+id/maintable"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:stretchColumns="0,1" >
            </TableLayout>
        </ScrollView>
    
    </LinearLayout>
    

    In the code above some lines are commented, these lines are what I already tried to get the row values but it failed. Can anyone help me with this?