5

Kann jemand vorschlagen, dieses API8-Beispiel zu verbessern? Während sie sagen, die Ansichten könnten in XML definiert worden sein, was sie tatsächlich getan haben, ist sie in Java zu codieren. Ich verstehe, warum sie wollten. Sie haben einige Member zu einem erweiterten LinearLayout hinzugefügt, und die Werte werden zur Laufzeit bestimmt.Wie erweiterte LinearLayout aus XML aufblähen

Laut ach, jeder im Universum sollten die Layout-Richtlinien in XML verschieben. Für diese App ist es jedoch sinnvoll, den Text so zu belassen, wie er in der Laufzeitlogik ist. Wir haben also einen hybriden Ansatz. Füllen Sie die Ansichten auf und füllen Sie den dynamischen Text. Ich habe Probleme herauszufinden, wie ich es erreichen kann. Hier ist die Quelle und was ich versucht habe.

von API8 Examples, List4.java

private class SpeechView extends LinearLayout { 
    public SpeechView(Context context, String title, String words) { 
     super(context); 

     this.setOrientation(VERTICAL); 

     // Here we build the child views in code. They could also have 
     // been specified in an XML file. 

     mTitle = new TextView(context); 
     mTitle.setText(title); 
     ... 

ich seit dem Linearlayout gedacht hat einen Androiden: id = "@ + id/LinearLayout01", sollte ich in der Lage sein, dies zu tun in der OnCreate

SpeechView sv = (SpeechView) findViewById(R.id.LinearLayout01); 

aber es trifft nie den minimalen Konstruktor, den ich hinzufügte:

public class SpeechView extends LinearLayout { 
     public SpeechView(Context context) { 
      super(context); 
      System.out.println("Instantiated SpeechView(Context context)"); 
     } 
     ... 

Antwort

3

Es scheint, als ob Sie Ihr Layout aufgebläht haben, das sich in der Datei main_row.xml befindet. Richtig? Mein Bedarf ist anders. Ich möchte ein TextView-Kind des Layouts in main.xml aufblasen.

Dennoch habe ich eine ähnliche Lösung verwendet. Da ich schon hatte die Linearlayout von XML in der

onCreate aufgeblasen
setContentView(R.layout.main); 

was übrig blieb, ist das Textview von XML in meiner Ansicht Konstruktor aufzublasen. Hier ist, wie ich es gemacht habe.

LayoutInflater li = LayoutInflater.from(context); 
LinearLayout ll = (LinearLayout) li.inflate(R.layout.main, this); 
TextView mTitle = (TextView) ll.findViewById(R.id.roleHeading); 

R.id.RoleHeading ist die ID des TextView, das ich aufblase.

<TextView android:id="@+id/roleHeading" ... /> 

Zur Steigerung der Effizienz ich in der Lage war, die LayoutInflater auf ein Aktivitätselement zu bewegen, so dass es nur einmal instanziiert wird.

10

Ich lief gerade in diese genau Problem selbst. Was ich denke, Sie (wir) benötigen, ist dieses, aber ich arbeite noch durch einige Fehler, so kann ich noch nicht sicher sagen:

public class SpeechView extends LinearLayout { 
     public SpeechView(Context context) { 
      super(context); 
      View.inflate(context, R.layout.main_row, this); 
     } 
     ... 

werde ich darauf bedacht sein, zu hören, wenn Sie kein Glück haben mit es.

Edit: Es funktioniert jetzt für mich genau so.

+0

Es funktioniert auch für mich. Vielen Dank! – Lion

Verwandte Themen