Android: inflate view from xml
Denne 12.06.2012 - 17:14 2082 3
Denne
Here to stay
|
Hey Ihrs! Ich habe hier ein mehr oder weniger schweres Problem, an welchem ich schon einige Stunden sitze und einfach nicht weiterkomme. Hoffe von euch hat da wer eine Idee Problem ist folgendes: Ich habe ein Framework für Android, welches externe Plugins (eigenständige Programme, welches das Framework nutzen) während der Programmlaufzeit läd. Die Plugins werden an dieser Stelle per dex (die Class-files) als zip gepackt. Ich möchte nun, dass wenn ich im Framework das Plugin starte, die view vom Plugin verwendet wird. Das geht auch, aber nur wenn die GUI in Java gecodet ist. Per xml habe ich es noch nicht hinbekommen. Die Startklasse von einem Plugin schaut zum Beispiel so aus: public class Start extends ClientService {
@Override
public void executeService() {
System.out.println("Checkpoint 1");
LayoutInflater inf = (LayoutInflater)context.getSystemService(context.LAYOUT_INFLATER_SERVICE);
View v = inf.inflate(R.layout.main, null);
// Verzweifelter Versuch, die View irgendwie zum Vorschein zu bringen...
v.setVisibility(View.VISIBLE);
v.bringToFront();
((ViewGroup) super.getView()).removeAllViews();
((ViewGroup) super.getView()).addView(v);
System.out.println("Checkpoint 2");
}
@Override
public void stopService() {
// TODO Auto-generated method stub
}
}
Das Framework setzt voraus, dass ich von der ClientService-Klasse erbe, als Parameter bekomme ich den context übergeben. Google sagt, ich muss die view per inflate von der xml beziehen, mir wird aber nichts angezeigt und in logcat bekomme ich keine Fehlermeldung, nur der Hinweis "couldn't save which view has focus because the focused view has no id". Irgendwer eine Idee, wie ich es anstellen kann oder was ich falsch mache?
|
Denne
Here to stay
|
Falls mal wer das gleiche Problem haben sollte: Es ist wohl leider nicht möglich.
Ich habe das inflate geschafft, jedoch muss die xml im layout-Ordner des Frameworks liegen (da die Methode automatisch nur dort nachschaut), was bei Plugins nicht praktikabel ist (da man für jedes Plugin das Framework anpassen muss, auch wenn es nur copy/paste einer xml-Datei ist). Laut der docu kann man bei der inflate-Methode jedoch keinen externen Pfad angeben und somit fällt diese Möglichkeit flach.
Ob es einen komplett anderen Weg gibt, weiß ich an dieser Stelle nicht - ich will es mal nicht ausschließen.
|
ica
hmm
|
Dafür gibts eigentlich Android Library Projekte - oder nicht?
|
Denne
Here to stay
|
Ich bin mir nicht sicher, was du meinst. Library Projects haben ja den Vorteil, dass man auf Resourcen zugreifen kann. Die Plugins sind aber keine normalen apk Dateien, sondern eine per Hand generierte zip (adb dex), in der sind auch nicht die xml-Dateien vorhanden.
Oder hab ich dich da irgendwie falsch verstanden?
|