layout von string laden

  • 6 Antworten
  • Letztes Antwortdatum
M

MrRAP

Neues Mitglied
0
hi,

komme von c# und bin eine "newbee" auf android. google schon seit tagen und bin mir nicht sicher ob meine idee überhaupt funktioniert.

folgendes problem:

ich lade über ein php-skript meine xml-datei und bekomme einen xml-string als "response". funktioniert alles einwandfrei.

jetzt habe ich den xml-string in einer variable (natürlich ist der string schon auf android-layout formartiert --> d.h. füge ich den quellcode in meine activity_main.xml ein, wird auch alles richtig angezeigt).

wie kann ich jetzt diesen string direkt auf meine activity zuweisen (also z.b. mit setContentView)?

habe schon einiges mit xml-parser herumprobier, z.b.:

Code:
[SIZE=2]DefaultHttpClient hc = [/SIZE]
[LEFT][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]new[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2] DefaultHttpClient(); [/SIZE]

[SIZE=2]ResponseHandler <String> res = [/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]new[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2] BasicResponseHandler(); [/SIZE]
[LEFT][SIZE=2]HttpPost postMethod = [/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]new[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2] HttpPost([/SIZE][SIZE=2][COLOR=#2a00ff][SIZE=2][COLOR=#2a00ff][URL]http://.../get_menu.php[/URL][/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2]);[/SIZE]
[SIZE=2]String response=hc.execute(postMethod,res); [/SIZE]
[SIZE=2]//^^^^bis hier hin ist alles klar^^^^[/SIZE][/LEFT]
[/LEFT]

 
 

[LEFT][SIZE=2]XmlPullParserFactory factory = XmlPullParserFactory.[I]newInstance[/I]();[/SIZE]
[LEFT][SIZE=2]factory.setNamespaceAware([/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]true[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2]);[/SIZE]
[SIZE=2]XmlPullParser xpp = factory.newPullParser();[/SIZE][/LEFT]
[/LEFT]

 

[LEFT][SIZE=2]xpp.setInput( [/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]new[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2] StringReader ( response ) );[/SIZE][/LEFT]

 
 

[LEFT][SIZE=2]LayoutInflater inflater = getLayoutInflater();[/SIZE]
[LEFT][SIZE=2]View view = inflater.inflate(xpp, [/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]null[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2]);[/SIZE][/LEFT]
[/LEFT]

 
 
[LEFT][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]this[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2].setContentView(view);[/SIZE][/LEFT]

was mache ich falsch bzw. wie gehe ich das besser an oder ist das überhaupt möglich?
vielen dank im voraus.​

lg​
 
Ich würde davon ausgehen, dass das Layout bereits bei Kompilierung vorliegen muss. Für die ganzen Elemente des Layouts vergibt Android ja schliesslich intern (bei Kompilierung) auch IDs, so dass sie aus dem Code heraus benutzbar werden.

Was ist denn der Grund dafür, dass du es von einem Server holst? Ich meine so hochdynamisch kann ein Layout ja eigentlich nicht sein. Wieso nicht 10 Layouts in der App hinterlegen, und dann einfach vom Server die Nummer des zu ladenden Layouts holen. Oder für ein bisschen mehr Kontrolle könnte man auch Objekte dynamisch verstecken/zeigen.

Aber wieso man das in PHP machen muss, das verwirrt mich etwas.
 
hi,

ich mache einen php zugriff und das skript gibt mir eben das layout zurückgeben.
meine oberfläche ist eben komplett dynamisch und daher kann ich leider nicht im vorhinein die xml´s ins projekt geben.

das mit den id´s war mir schon klar. daher auch meine frage :)

hab im internet auch schon so einen "pizza-bestellen-app"-code als beispiel gefunden. sowas in der art suche ich eben, nur dass ich schon einen fertige xml-string als respond bekomme.

irgendwelche ideen noch?

danke und lg
 
Das geht nicht. Die XML-Files sind stark vorbearbeitet, bevor sie mit dem apk-File gebündelt werden. Rohe XML-Daten kann der LayoutInflater nicht verarbeiten.

"For performance reasons, view inflation relies heavily on pre-processing of XML files that is done at build time."

Wenn das unbedingt sein muss, dass das Layout dynamisch vom Server bestimmt wird, musst Du es selber programmatisch erzeugen anhand der ViewHierarchie, die Du vom Server bekommst.

Gibt es gar keine Gemeinsamkeiten? Kann ich mir gar nicht vorstellen.

Wenn es Gemeinsamkeiten gibt, könntest Du bspw. fünf Layouts vordefinieren und je nach Server-Antwort bestimmte Views ausblenden, die der Nutzer nicht sehen soll.
 
hi,

ok vielen dank für die schnelle antwort.
leider gefällt sie mir nicht, aber sie war aufschlussreich!

und ja, gibt schon gemeinsamkeiten, dachte nur so würde es einfacher funzn, wenn ich nur die xml laden muss :smile:

danke nochmals und lg
 
Klingt für mich irgendwie nach nem Denkfehler. Wenn's wirklich so hochdynamisch sein muss, dann sollte man das evtl. als HTML5 WebView machen, statt als natives Layout.

Oder du hast halt ein Layout und versteckst, resized und verschiebst dynamisch die UI Elemente aus dem Code heraus.
 
hi,

vollkommen recht mit dem denkfehler :)
dachte ich kann einen XML-code direkt laden, aber danke für antwort. hat sich inzwischen erledigt.

lg
 
Zurück
Oben Unten