How do I get values from a dynamically created android TableRow?
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();
}
});
Comments
-
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 theTableRow
. Here is the sample code (I got it from Google), it has two text values in theTableRow
. When I click theTableRow
at any position it gives the corresponding value in theTableRow
(I wish something similar to aListView
).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?