Problem mit Layout erweitern

GENiALi

GENiALi

Fortgeschrittenes Mitglied
11
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?
 
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?
 
  • Danke
Reaktionen: GENiALi
Was ist dann genau der Unterschied zwischen .addView und dem LayoutInflator?
b.z.w wie plaziere ich ein FrameLayout zuoberst im XML Stack?
 
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.
 
  • Danke
Reaktionen: GENiALi
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?
 
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);
 
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.
 
android.R.xxx ist aber Android-Internes Layout, das ist dir klar, oder?
 
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:

Tom299 schrieb:
android.R.xxx ist aber Android-Internes Layout, das ist dir klar, oder?
Jap. Aber das gibt mir genau das zurück was ich suche. Jedenfals scheint das so.
 
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 ;-)
 
  • Danke
Reaktionen: GENiALi

Ähnliche Themen

L
Antworten
4
Aufrufe
1.329
lonnie9020
L
S
Antworten
4
Aufrufe
988
Sempervivum
S
B
Antworten
4
Aufrufe
469
bb321
B
Zurück
Oben Unten