Layout dynamisch erstellen in Fragment

  • hey folks,


    ich würde gerne ohne ein XML Layout die View eines Fragments dynamisch erstellen. Alle Beispiele die ich finde basieren auf einer Activity, ich habe bzw. brauche aber ein Fragment.


    Probleme bereitet mir nur das ich mein LinearLayout nicht auf die View setzen kann ( Zeile 47 )...
    der Rest funktioniert soweit. Deisem Fragment möchte ich später dann mehrere Parameter mitgeben, damit eine unterschiedliche Anzahl Buttons, Checkboxen und Textviews erstellt werden können.
    Dieses Fragment wird erstellt, mit weiteren Fragmenten in einem Array abgelegt und später wird das Array bzw. die Fragmente darin, einem FragmentStatePagerAdapter hinzugefügt.
    Es gibt auch mehrere FragmentStatePagerAdapter die über einen Spinner ausgewählt werden, aber das funktioniert bereits.

  • Da solltest du dir am besten mal die onCreateView-Methode anschauen.
    Dort kannst du ein Layout inflaten.
    siehe dev.android ;)
    setContentView gibt es nämlich nur bei Activities ;)

    MfG,
    Christopher


    Eine gewisses Maß an Freundlichkeit kann man auch von Menschen im Internet erwarten.
    Das Forum basiert komplett auf der Freiwilligkeit ihrer Nutzer und diese sollen sich wohlfühlen! Daher seid bitte freundlich. Danke

  • Ich glaube du verstehst mein Problem nicht ganz, ich will kein statisch erstelltes XML-Layout nutzen.
    Ich möchte mein Layout so wie ich es oben im Codeblock gezeigt hab, dynamisch erstellen. Aber jedes Beispiel das ich irgendwo finde basiert auf Activities, und dort wird das dynamisch erstellte Layout dann mit Hilfe von setContentView(); gesetzt. Aber wie macht man das ganze in einer Klasse die nicht von Activity erbt sonder von Fragment??? Bin ich wirklich der erste der das versucht ???


    Was soll mir also das hier bringen?

    Java
    @Override
      public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    	View view = inflater.inflate(R.layout.mein_XML_Layout, container, false);
    	return view;
      }
  • habe soeben eine Lösung gefunden und auf stackOverflow gepostet...


    Aber hier nochmal für unsere deutschsprachigen Freunde...


    Zuerst muss eine leere Layout XML erstellt werden...

    HTML
    <?xml version="1.0" encoding="utf-8"?>
    <FrameLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        >
    </FrameLayout>


    In der Klasse die von Fragment erbt, in der dann das Layout dynamisch erstellt werden soll, genau dieses leere XML Layout inflaten...

    Java
    @Override
      public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    	View view = inflater.inflate(R.layout.blank_layout, container, false);
    	return view;
      }


    Anschliessend in der Methode onCreateView() kann man das Layout dynamisch erstellen...


    Ich hoffe ich konnte damit auch einmal einen gewissen Beitrag zur AndroidDevelopers Community beitragen B-) 8) 8)

  • Tja, zu spät gelesen. ;)


    Dein Problem ist, dass Du onCreate() benutzt hast, um das View zu setzen. Das funktioniert aber nicht, da eigene Fragmente ihr View selbst erstellen.
    Kurz gesagt: in der onCreate() geht setContentView() nicht, da das dazu notwendige superview noch nicht gesetzt wurde.


    Dein Ansatz war schon ganz richtig, gehört aber entweder in die onCreateView() oder onViewCreated().
    Den Umweg über ein öddeliges leeres XML brauchst Du gar nicht.


    Pack Deinen Code in die onCreateView(), aber rufe nicht setContentView(ll) auf, sondern return ll.

    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.


    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«

  • Dein Problem ist, dass Du onCreate() benutzt hast, um das View zu setzen. Das funktioniert aber nicht, da eigene Fragmente ihr View selbst erstellen.

    Funktioniert hat meine Variante dann ja, aber damit wird es mir auch erst bewusst wie es funktioniert. ;)


    Dein Ansatz war schon ganz richtig, gehört aber entweder in die onCreateView() oder onViewCreated().
    Den Umweg über ein öddeliges leeres XML brauchst Du gar nicht.

    Das ist ja top, vielen Dank.


    Pack Deinen Code in die onCreateView(), aber rufe nicht setContentView(ll) auf, sondern return ll.

    Funktioniert wunderprima mit der onCreateView() B-)

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!