Wie lade ich programmatisch eine Layout-XML-Datei in Android?
Ich habe ein Layout erstelltmy_layout.xml), die programmgesteuert beispielsweise zwei andere XML-Layoutdateien enthältsome_layout.xml undanother_layout.xml. my_layout.xml wird gezeichnet mitsetContentView(R.layout.my_layout)
.
Jetzt habe ich eine Checkbox mit IDsome_checkbox
, die im Inneren definiert istsome_layout.xml, und ich möchte das Kontrollkästchen einOnCheckedChangeListener
mitsetOnCheckedChangeListener()
, genau wie dieser:
CheckBox cb = (CheckBox) findViewById(R.id.some_checkbox);
cb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
...
});
Aber jetzt aNullPointerException
wird geworfen, weilcb
istnull
. Ich denke, das liegt daran, dass das Layout enthältsome_checkbox
(welches istirgendein_layout) wird nicht mit geladensetContentView(R.layout.some_layout)
.
R.id.some_checkbox
null
? irgendein_layout Ja wirklichist sichtbar.Frage 2: Wie lade ich?irgendein_layout damit ich einfangen kannsome_layout
in eine Variable, wie ich es im obigen Code-Snippet versucht habe?AKTUALISIERENIch habe es endlich gelöst, indem ich das Folgende verwendete, vorgeschlagen vonStealthjong:
Eine Lösung könnte darin bestehen, die zu initialisierencheckedChangeListener
Wenn Sie der erweiterbaren Listenansicht einen Listener hinzufügen und ein untergeordnetes Element der erweiterbaren Listenansicht geöffnet wird, überprüfen Sie, ob IhreCheckbox
ist eines der aufgeblasenen Kinder und fügt das hinzucheckedchangeListener
wenn ja.
Ich habe eine Methode namens erstelltsetCheckedChangeListenerToElement(int resourceId, OnCheckedChangeListener listener)
, das die angegebene resourceId (die ID des Elements, an das ein Listener angehängt werden soll) und den angegebenen Listener speichert. Sobald der Inflater die Methode aufruftgetChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent)
kann die Ansicht abgerufen werden. Dann, auf dieser Ansicht,findViewById(int resourceId)
kann angerufen werden, woresourceId
ist die ID des Kontrollkästchens.