¿Cómo cargar programáticamente un archivo XML de diseño en Android?
He hecho un diseñomy_layout.xml) que incluye mediante programación otros dos archivos de diseño XML, digamossome_layout.xml yanother_layout.xml. my_layout.xml se dibuja usandosetContentView(R.layout.my_layout)
.
Ahora tengo una casilla con IDsome_checkbox
, que se define en el interiorsome_layout.xml, y quiero dar a la casilla de verificación unOnCheckedChangeListener
utilizandosetOnCheckedChangeListener()
, así como esto:
CheckBox cb = (CheckBox) findViewById(R.id.some_checkbox);
cb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
...
});
Pero ahora unNullPointerException
es arrojado, porquecb
esnull
. Supongo que es porque el diseño que contienesome_checkbox
(cual essome_layout) no se carga utilizandosetContentView(R.layout.some_layout)
.
R.id.some_checkbox
null
? some_layout De Verdades visible.Pregunta 2: ¿Cómo puedo 'cargar'?some_layout para que pueda capturarsome_layout
en una variable, como lo intenté en el fragmento de código anterior?ACTUALIZARFinalmente lo he resuelto, usando lo siguiente, sugerido porStealthjong:
Una solución podría ser la inicialización decheckedChangeListener
, agregando un oyente a su vista de lista expandible, y cuando se abre un elemento secundario de la vista de lista expandible, verificando siCheckbox
Es uno de los niños inflados, y sumando elcheckedchangeListener
si es así.
He creado un método llamadosetCheckedChangeListenerToElement(int resourceId, OnCheckedChangeListener listener)
, que guarda el ID de recurso dado (que es el ID del elemento al que se adjunta un oyente) y el oyente dado. Una vez que el inflador llama al método.getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent)
, la vista se puede recuperar. Entonces, en esa vista,findViewById(int resourceId)
se puede llamar, donderesourceId
es el ID de la casilla de verificación.