Ich versuche, TextViews
mein XML-definiertes Layout im Code zu ergänzen . Ich habe ein XML-Blatt, in dem viele Views
definiert sind. Aber ich muss einige Ansichten im Code hinzufügen, also ein LinearLayout
im XML-Sheet erstellen:
<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>
Und in diesem Layout möchte ich meine hinzufügen 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);
Ich erhalte aber nur folgende Fehlermeldung:
: java.lang.ClassCastException: android.widget.TextView
Wie kann ich es tun?
Danke für deine Hilfe. Martin
setContentView(R.layout.your_xml_layout);
wirklich die richtige XML geladen? Haben Sie andere XML-Layouts, in denen Sieandroid:id="@+id/info"
TextView verwenden?Antworten:
versuchen Sie es mit
Stellen Sie außerdem sicher, dass die von Ihnen erstellten Layoutparameter LinearLayout.LayoutParams ... sind.
quelle
Hey, ich habe deinen Code überprüft, es gibt keinen schwerwiegenden Fehler in deinem Code. Dies ist der vollständige Code:
main.xml: -
Dies ist Stackoverflow.java
Kopieren Sie diesen Code und führen Sie ihn aus. es ist völlig fehlerfrei. sich kümmern...
quelle
<TextView android:id="@+id/tvDInfo3" android:layout_width="0dp" android:layout_height="wrap_content" android:textStyle="bold" android:text="Release Date" android:gravity="center" android:padding="@dimen/dyk_text_pad" android:textColor="#000000" android:textSize="@dimen/info_text_size" android:layout_weight="1" />
TextView
initialisiert werden. Dies sollte als Antwort markiert werden.Sie können
TextView
Ihrem linearen Layout programmgesteuert Folgendes hinzufügen :quelle
MyClass.this
In den meisten Fällen ist es dasselbe wiethis
. Sie müssen jedoch den Namen der Klasse angeben, wenn Sie sich in einer verschachtelten Klasse befinden und auf die Instanz der "äußeren" Klasse zugreifen möchten, was beim Definieren von Rückrufen für die Ereignisse in Android sehr häufig vorkommt.MyClass.this
ist eine Instanz vonMyClass
, und es wird nur ein Kontext sein, wenn MyClass Context implementiert (z. B. Aktivität erweitert)quelle
Sie sollten etwas Ähnliches verwenden, um TextView dynamisch zu LinearLayout hinzuzufügen:
getActivity () wird für Fragmente verwendet. Sie können für jede Instanz, in der Sie sich befinden, Kontext oder ähnliches verwenden.
quelle
Sie müssen auf das Layout über die Layoutressource zugreifen, nicht über eine ID-Ressource, die nicht eindeutig eindeutig ist. Die Ressourcenreferenz sollte wie R.layout.my_cool_layout aussehen, wobei Ihr oben genanntes XML-Layout in res / layout / my_cool_layout.xml gespeichert ist.
quelle
quelle
Hier tritt die Ausnahme auf
addView
Methode nimmt einen Parameter vom TypView
nicht aufTextView
. Geben Sie daher das valueTv-Objekt explizit in ein View-Objekt ein.Daher wäre der korrigierte Code:
quelle