5

¿Alguien puede sugerir una forma de mejorar este ejemplo de API8? Si bien dicen que las vistas podrían haberse definido en XML, lo que de hecho han hecho es codificarlas en Java. Veo por qué querían. Han agregado algunos miembros a LinearLayout ampliado, y los valores se determinan en tiempo de ejecución.Cómo inflar Extended LinearLayout desde XML

De acuerdo con oh, todos en el universo, las directivas de diseño deberían pasar a XML. Pero para esta aplicación, tiene sentido seguir configurando el texto tal como está en la lógica de tiempo de ejecución. Entonces tenemos un enfoque híbrido. Infle las vistas, luego rellene el texto dinámico. Tengo problemas para descubrir cómo lograrlo. Aquí está la fuente y lo que probé.

de 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); 
     ... 

Pensé que ya la LinearLayout tiene un androide: id = "@ +/Identificación del LinearLayout01", que debería ser capaz de hacer esto en el OnCreate

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

pero nunca golpea el constructor mínimo que agregué:

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

Respuesta

3

Parece que ha inflado su diseño, que se encuentra en el archivo main_row.xml. ¿Correcto? Mi necesidad es diferente. Quiero inflar un elemento secundario TextView del Diseño que tengo en main.xml.

Aún así, utilicé una solución similar. Como ya había inflado el LinearLayout de XML en el onCreate

setContentView(R.layout.main); 

lo que quedaba es para inflar el TextView desde XML en mi opinión constructor. Así es como lo hice.

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 es la identificación del TextView que estoy inflando.

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

para aumentar la eficiencia pude mover el LayoutInflater a un miembro de la actividad, por lo que solo se crea una instancia de una vez.

10

Acabo de toparme con este exacto problema yo mismo. Lo que yo creo que (nosotros) necesitamos es esto, pero sigo trabajando a través de algunos errores, así que aún no puedo decir con certeza:

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

voy a estar ansioso de escuchar si tiene suerte con las eso.

Editar: Ahora está trabajando para mí así como así.

+0

Funciona para mí, tampoco. ¡Gracias! – Lion

Cuestiones relacionadas