Android: agregue una vista de texto al diseño lineal mediante progtwigción

Estoy tratando de agregar TextViews a mi diseño definido xml en el código. Tengo una hoja xml, donde se definen muchas Views . Pero tengo que agregar algunas vistas en el código, así que crea un LinearLayout en la hoja xml:

   

Y en este diseño, me gusta agregar mi TextView :

  View linearLayout = findViewById(R.id.info); //LinearLayout layout = (LinearLayout) findViewById(R.id.info); TextView valueTV = new TextView(this); valueTV.setText("hallo hallo"); valueTV.setId(5); valueTV.setLayoutParams(new LayoutParams( LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT)); ((LinearLayout) linearLayout).addView(valueTV); 

Pero solo recibo el siguiente mensaje de error:

 : java.lang.ClassCastException: android.widget.TextView 

¿Cómo puedo hacerlo?

Gracias por tu ayuda. Martín

intenta usar

 LinearLayout linearLayout = (LinearLayout)findViewById(R.id.info); ... linearLayout.addView(valueTV); 

también asegúrese de que los parámetros de diseño que está creando sean LinearLayout.LayoutParams …

Hola, he revisado tu código, no hay un error grave en tu código. este es el código completo:

main.xml: –

    

esto es Stackoverflow.java

 import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.ViewGroup.LayoutParams; import android.widget.LinearLayout; import android.widget.TextView; public class Stackoverflow extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); View linearLayout = findViewById(R.id.info); //LinearLayout layout = (LinearLayout) findViewById(R.id.info); TextView valueTV = new TextView(this); valueTV.setText("hallo hallo"); valueTV.setId(5); valueTV.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT)); ((LinearLayout) linearLayout).addView(valueTV); } } 

copia este código y ejecútalo está completamente libre de errores. Cuídate…

Puede agregar un TextView a su diseño lineal mediante progtwigción de esta manera:

 LinearLayout linearLayout = (LinearLayout) findViewById(R.id.mylayout); TextView txt1 = new TextView(MyClass.this); linearLayout.setBackgroundColor(Color.TRANSPARENT); linearLayout.addView(txt1); 
 for(int j=0;j<30;j++) { LinearLayout childLayout = new LinearLayout(MainActivity.this); LinearLayout.LayoutParams linearParams = new LinearLayout.LayoutParams( LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); childLayout.setLayoutParams(linearParams); TextView mType = new TextView(MainActivity.this); TextView mValue = new TextView(MainActivity.this); mType.setLayoutParams(new TableLayout.LayoutParams( LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, 1f)); mValue.setLayoutParams(new TableLayout.LayoutParams( LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, 1f)); mType.setTextSize(17); mType.setPadding(5, 3, 0, 3); mType.setTypeface(Typeface.DEFAULT_BOLD); mType.setGravity(Gravity.LEFT | Gravity.CENTER); mValue.setTextSize(16); mValue.setPadding(5, 3, 0, 3); mValue.setTypeface(null, Typeface.ITALIC); mValue.setGravity(Gravity.LEFT | Gravity.CENTER); mType.setText("111"); mValue.setText("111"); childLayout.addView(mValue, 0); childLayout.addView(mType, 0); linear.addView(childLayout); } 

Debe acceder al diseño a través de su recurso de diseño, no a un recurso de identificación que no esté garantizado. La referencia del recurso debe verse como R.layout.my_cool_layout donde su disposición XML anterior se almacena en res / layout / my_cool_layout.xml.

Debería usar algo similar a esto para agregar TextView a LinearLayout dinámicamente:

 LinearLayout linearLayout = getActivity().findViewById(R.id.infoLayout); TextView valueTV = new TextView(context); valueTV.setText("hallo hallo"); valueTV.setId(Integer.parseInt("5")); valueTV.setLayoutParams(new LinearLayout.LayoutParams( LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT)); linearLayout.addView(valueTV); 

getActivity () se usa para Fragmentos internos, puedes usar contexto o algo similar por cada instancia en la que te encuentres.

 LinearLayout.LayoutParams layoutParams ; layoutParams= new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT); 

Aquí es donde ocurre la excepción

 ((LinearLayout) linearLayout).addView(valueTV); 

addView método addView toma un parámetro de tipo View , no TextView . Por lo tanto, encasilla el objeto valueTv en un objeto Ver, explícitamente.

Por lo tanto, el código corregido sería:

 ((LinearLayout) linearLayout).addView((TextView)valueTV);