¿Cómo obtengo valores de un TableRow android creado dinámicamente?

Utilicé el siguiente código para crear un TableRow con contenido de forma dinámica. Funciona bien pero deseo obtener los valores en TableRow . Aquí está el código de ejemplo (lo recibí de Google), tiene dos valores de texto en el TableRow . Cuando hago clic en el TableRow en cualquier posición que da el valor correspondiente en el TableRow (deseo algo similar a un 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> 

En el código anterior algunas líneas son comentadas, estas líneas son lo que ya intenté obtener los valores de la fila, pero falló. Puede alguien ayudarme con esto?

Supongo que estás hablando de conseguir esos valores en un clic de TableRow . Si este es el caso, podría agregar un listener a su TableRow y usar getChildAt para obtener una bodega de las dos TextViews y obtener los datos:

 //... 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(); } }); //... 

Para obtener datos de textview primero u necesidad de identificar a su padre de que u necesidad de obtener su posición textView niño entonces u puede obtener datos de él … Aquí está una muestra

  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(); } }); 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.