Android: Ajouter un textview à la disposition linéaire par programmation

J’essaie d’append TextViews à ma disposition définie dans XML dans le code. J’ai une feuille XML, où beaucoup de Views sont définies. Mais je dois append quelques vues dans le code, donc créez un LinearLayout dans la feuille XML:

   

Et dans cette mise en page, j’aime append mon 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); 

Mais je reçois uniquement le message d’erreur suivant:

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

Comment puis-je le faire?

Merci pour ton aide. Martin

essayez d’utiliser

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

Assurez-vous également que les parameters de disposition que vous créez sont LinearLayout.LayoutParams …

Hey j’ai vérifié votre code, il n’y a pas d’erreur grave dans votre code. c’est le code complet:

main.xml: –

 < ?xml version="1.0" encoding="utf-8"?>   

c’est 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); } } 

Copiez ce code et exécutez-le. c’est complètement sans erreur. prends soin…

Vous pouvez append un TextView à votre présentation linéaire par programmation comme ceci:

 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); } 

Vous devez accéder à la mise en page via sa ressource de mise en page, et non une ressource d’identification non garantie unique. La référence de ressource doit ressembler à R.layout.my_cool_layout où votre disposition XML ci-dessus est stockée dans res / layout / my_cool_layout.xml.

Vous devez utiliser quelque chose de similaire pour append TextView à LinearLayout de manière dynamic:

 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 () est utilisé pour les fragments internes, vous pouvez utiliser le contexte ou tout object similaire pour chaque instance à l’intérieur de laquelle vous vous trouvez.

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

Voici où l’exception se produit

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

addView méthode addView un paramètre de type View , pas TextView . Par conséquent, transformez explicitement l’object valueTv en object View.

Par conséquent, le code corrigé serait:

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