1. Hast Du Lust, bei uns mitzuarbeiten und das AH-Team zu verstärken? Alle Details zu dieser aktuellen Herausforderung findest Du hier.
  1. GENiALi, 21.06.2012 #1
    GENiALi

    GENiALi Threadstarter Erfahrener Benutzer

    Hallo

    Ich will irgend wie folgendes erreichen.

    Ich habe:
    1. Ein XML mit einem FrameLayout drin, im FrameLayout irgend was.
    2. Irgend eine Activity mit irgend was drin. FrameLayout, LinearLayout, egal was.

    Ich will:
    Das XML aus Punkt 1 der Activity hinzufügen. Und zwar zuoberst. Ohne das ich wissen muss was es in der Activity gibt. Ich will nicht irgend welche ID's aus der Aktivity haben müssen um ein XML Fragment hinzuzufügen.

    Mit dem LayoutInflator brauche ich einfach zu viele Infos um das zu erreichen.

    Irgend was in der Form: currentActivity.addXmlFragmentTop(R.layout.xml_aus_punkt_1);
    currentActivity.addXmlFragmentBottom(R.layout.xml_aus_punkt_1);

    Wie krieg ich das hin?
     
  2. Tom299, 22.06.2012 #2
    Tom299

    Tom299 Android-Experte

    Mehrfach verwendete Layout-Teile bekommen bei mir immer eine eigene XML-Datei, die kann ich dann inflaten und mit .addView(...) immer an die passende Stelle einsetzen. Vielleicht hilft dir das weiter?
     
    GENiALi gefällt das.
  3. GENiALi, 22.06.2012 #3
    GENiALi

    GENiALi Threadstarter Erfahrener Benutzer

    Was ist dann genau der Unterschied zwischen .addView und dem LayoutInflator?
    b.z.w wie plaziere ich ein FrameLayout zuoberst im XML Stack?
     
  4. Tom299, 22.06.2012 #4
    Tom299

    Tom299 Android-Experte

    Wieso Unterschied?

    Dein XML wird "automatisch inflated", wenn du die ContentView setzt (z.B. setContentView(R.layout.main)). Alle XML-Elemente, die in der main.xml sind, stehen dann zur Verfügung.

    Du kannst aber die ContentView nur 1 mal setzen. Brauchst du noch andere XML-Layouts (z.B. nen Header, den jede Activity haben soll), dann kannst du diese Layouts über den LayoutInflater dazuladen, um auch Zugriff auf diese Elemente zu bekommen.

    Diese Layouts kannst du dann mit .addView hinzufügen. Bei .addView() gibts die Option, als 2. Parameter die Position anzugeben, wo das Layout untergebracht werden soll.

    z.B.:
    Code:
    layout.addView(LayoutHelper.getApplicationTitleLayout(this, "Protokoll"), 0);
    
    Damit füge ich mein ApplicationTitle an oberster Stelle ein, man könnte auch sonst wo einfügen. Das mußt du aber dann bei dir schauen, welche Position zu benötigst.
     
    GENiALi gefällt das.
  5. GENiALi, 22.06.2012 #5
    GENiALi

    GENiALi Threadstarter Erfahrener Benutzer

    Mein naiver Ansatz war jetzt eine Methode(View view) und dann view.addView was es aber nicht gibt. Ich muss also wieder an ein Layout kommen und das bekomme ich nur vom LayoutInflator, wenn ich das richtig verstanden habe. Aber in der Methode will ich nichts von der view wissen. Einfach nur hinzufügen.

    Wie komme ich an das Rootlayout einer Activity ohne irgend eine ID?
     
  6. Tom299, 22.06.2012 #6
    Tom299

    Tom299 Android-Experte

    Layouts, die du im Code ansprechen willst, brauchen eine ID, zumindest kenn ich das so. Ist aber auch kein Problem, deinem Root-Layout eine ID im XML zu geben, oder?

    setContentView(R.layout.ablesung2);
    LinearLayout layout = (LinearLayout) findViewById(R.id.ablesung2_linear_layout);
    layout.addView(myOtherLayout, 0);
     
  7. GENiALi, 22.06.2012 #7
    GENiALi

    GENiALi Threadstarter Erfahrener Benutzer

    Es gibt eine ID für das Rootlayout einer jeder Activity.

    public void displayAds(View view)
    {
    if (view != null)
    {
    _ViewGroup = (ViewGroup) view.findViewById(android.R.id.content); //ID für Rootlayout

    Allerdings kann ich dann mit addView(layoutInflator nichts mehr hinzufügen. :-(

    Meldung:
    java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.

    Mal schauen.
     
  8. Tom299, 22.06.2012 #8
    Tom299

    Tom299 Android-Experte

    android.R.xxx ist aber Android-Internes Layout, das ist dir klar, oder?
     
  9. GENiALi, 22.06.2012 #9
    GENiALi

    GENiALi Threadstarter Erfahrener Benutzer

    So, Lösung gefunden ohne dass ich die Activity genauer kennen muss.

    Code:
    public void displayAds(View view)
    {
        if (view != null)
        {
            _viewGroup = (ViewGroup) view.findViewById(android.R.id.content);
            
            LayoutInflater layoutInflater = (LayoutInflater) _activity
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            _adView = layoutInflater.inflate(R.layout.ads, _viewGroup, false);
            
            _adFrame = (FrameLayout) _adView.findViewById(R.id.adFrameLayout);
            
            _viewGroup.addView(_adFrame, 0);
    
    Allerdings erscheint der Content noch immer unter dem anderen Content. Die Reihenfolge stimmt also noch nicht. Die View schiesst mir Werbung ein mit einem Schliessenbutton. Der ist aber hinter den Controls. Also die 0 beim addView brachte nicht die gewünschte Wirkung. Bin aber der Lösung schon sehr viel näher als auch schon. :tongue:

    Der ursprüngliche Beitrag von 08:39 Uhr wurde um 08:40 Uhr ergänzt:

    Jap. Aber das gibt mir genau das zurück was ich suche. Jedenfals scheint das so.
     
  10. Tom299, 22.06.2012 #10
    Tom299

    Tom299 Android-Experte

    Ja, kann sein, daß du das genau brauchst. Aber manchmal übersieht man sowas und es wird nicht das eigene Layout benutzt und dann wundert man sich ;-)
     
    GENiALi gefällt das.
Die Seite wird geladen...
Ähnliche Themen Forum Datum
[Offen] Android Layout funktioniert nicht Android App Entwicklung 08.09.2017
[OFFEN] Problem mit meiner Login App Android App Entwicklung 10.06.2017
[OFFEN] git-Problem in Android Studio (Windows) Android App Entwicklung 24.05.2017
[ERLEDIGT] put in HashMap bringt App zum abstürzen Android App Entwicklung 22.05.2017
[ERLEDIGT] Problem mit Async Task und auszuführender Aufgabe Android App Entwicklung 02.05.2017
[OFFEN] Klick auf Marker soll ein zweites kleineres Layout anzeigen, Map soll trotzdem noch scrollbar (verwendbar) sein Android App Entwicklung 04.04.2017
[ERLEDIGT] Problem beim Starten einer neuen Activity Android App Entwicklung 21.03.2017
[ERLEDIGT] Layout (Design) erkennt style nicht? Android App Entwicklung 13.03.2017
Excel Dokument mithilfe von JExcelAPI auslesen funktioniert nicht :/ Android App Entwicklung 02.03.2017
Verständnisprobleme beim Layout Android App Entwicklung 21.02.2017