Intereting Posts
Язык ограниченного языка Android для проверки отсутствующих переводов Как скомпилировать и запустить программу C / C ++ в системе Android Динамически менять язык с помощью многоязычной поддержки androids? Установить шрифт во время выполнения, Textview Эмулированное Android-устройство не синхронизирует время и дату после восстановления моментального снимка Как получить строку Android Path в файл в папке «Активы»? SetImeOptions: почему кнопка «Готово» не отображается на мягкой клавиатуре? Извлечение фрагмента из ViewPager Offline Android Dev Guide Как я могу запустить Activity из класса non-Activity? EditText maxLines не работает – пользователь может все еще вводить больше строк, чем установлено У менеджеров кластеров API Android Android API минимальное количество маркеров до создания кластера? Менеджер Android SDK, только показывает установленный пакет PreferenceActivity значок активной панели действий не вернется домой (в отличие от ET :) Запускать кусок кода только один раз, когда приложение установлено

Android: добавьте текстовое представление в линейную компоновку программно

Я пытаюсь добавить TextViews в свой XML-макет в коде. У меня есть xml-лист, где определено много Views . Но мне нужно добавить некоторые представления в код, поэтому создайте LinearLayout в xml-листе:

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:id="@+id/info" android:layout_height="wrap_content" android:orientation="vertical"> </LinearLayout> 

И в этом макете я хотел бы добавить свой 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); 

Но я получаю следующее сообщение об ошибке:

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

Как мне это сделать?

Спасибо за помощь. Мартин

Solutions Collecting From Web of "Android: добавьте текстовое представление в линейную компоновку программно"

Попробуйте использовать

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

Также убедитесь, что параметры макета, которые вы создаете, – LinearLayout.LayoutParams …

Эй, я проверил ваш код, в вашем коде нет серьезной ошибки. Это полный код:

main.xml: –

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:id="@+id/info" android:layout_height="wrap_content" android:orientation="vertical"> </LinearLayout> 

Это 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); } } 

Скопируйте этот код и запустите его. Это абсолютно безошибочно. береги себя…

Вы можете добавить TextView в линейный макет программно следующим образом:

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

Вам нужно получить доступ к макету через свой ресурс макета, а не ресурс id, который не гарантирован уникальным. Ссылка ресурса должна выглядеть так: R.layout.my_cool_layout, где ваш вышеуказанный формат XML хранится в res / layout / my_cool_layout.xml.

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

Вот где происходит исключение

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

Метод addView принимает параметр типа View , а не TextView . Таким образом, явно выведите объект valueTv в объект View, явно.

Поэтому исправленный код будет:

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