Frage

Ich möchte programmgesteuert hinzufügen LinearLayout manche TextViews.Und ich möchte es nutzen LayoutInflater.Ich habe in meiner Aktivitätslayout-XML-Datei:

<LinearLayout
     android:id="@+id/linear_layout"
     android:layout_width="wrap_content"
     android:layout_height="fill_parent"
     android:orientation="vertical"
     />

Ich habe unten einen Aktivitätscode wie diesen geschrieben.

LinearLayout linearLayout = (LinearLayout) findViewById(R.id.linear_layout);
LayoutInflater inflater = (LayoutInflater) getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
TextView textView = (TextView) inflater.inflate(R.layout.scale, linearLayout, true);
textView.setText("Some text");
linearLayout.addView(textView);

Mein scale.xml Datei sieht so aus:

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:layout_weight="1"
     android:layout_marginLeft="50dp"
     android:layout_marginRight="50dp"  
     android:drawableTop="@drawable/unit"
     />

An der Schlange TextView textView = (TextView) inflater.inflate(R.layout.scale, linearLayout, true); Ich habe eine schwerwiegende Ausnahme wie diese unten.

 java.lang.RuntimeException: Unable to start activity ComponentInfo{my.package/my.package.MyActivity}: 
 java.lang.ClassCastException: android.widget.LinearLayout
 Caused by: java.lang.ClassCastException: android.widget.LinearLayout

Wenn ich in einer problematischen Zeile ersetze linearLayout mit null habe ich keine Ausnahme, aber die android:layout_marginLeft Und android:layout_marginRight Von meinem scale.xml werden ignoriert und ich kann keine Ränder um die hinzugefügte Textansicht sehen.

Ich habe eine Frage gefunden Android:ClassCastException beim Hinzufügen einer Header-Ansicht zu ExpandableListView aber in meinem Fall gibt es in der ersten Zeile eine Ausnahme, bei der ich den Inflator verwende.

War es hilfreich?

Lösung

Wenn Sie die Stammansicht angeben (linearLayout) im Aufruf an inflater.inflate(), wird die erweiterte Ansicht automatisch zur Ansichtshierarchie hinzugefügt.Sie müssen also nicht anrufen addView.Wie Sie bemerkt haben, ist die zurückgegebene Ansicht außerdem die Stammansicht der Hierarchie (a LinearLayout).Um einen Verweis auf die zu erhalten TextView selbst, können Sie es dann abrufen mit:

LinearLayout linearLayout = (LinearLayout) findViewById(R.id.linear_layout);
LayoutInflater inflater = (LayoutInflater) getApplicationContext().
    getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
inflater.inflate(R.layout.scale, linearLayout, true);
TextView textView = (TextView) linearLayout.getChildAt(
    linearLayout.getChildCount()-1);
textView.setText("Some text");

Wenn Sie der Ansicht eine geben würden android:id Attribut in Scale.xml, mit dem Sie es abrufen können

TextView textView = (TextView) linearLayout.findViewById(R.id.text_id);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top