Frage

ich ein Layout in XML definiert haben. Es enthält auch:

<RelativeLayout
    android:id="@+id/item"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
/>

Ich möchte diese RelativeView mit anderen XML-Layout-Datei aufzublasen. Ich kann verschiedene Layouts verwenden, um auf eine Situation abhängig. Wie soll ich es tun? Ich habe versucht, verschiedene Variationen von

RelativeLayout item = (RelativeLayout) findViewById(R.id.item);
item.inflate(...)

Aber keiner von ihnen hat gut funktioniert.

War es hilfreich?

Lösung

Ich bin nicht sicher, ich habe Ihre Frage- gefolgt versuchen Sie, ein Kind Blick auf die RelativeLayout zu befestigen? Wenn dies der Fall möchten Sie etwas entlang der Linien von dem tun:

RelativeLayout item = (RelativeLayout)findViewById(R.id.item);
View child = getLayoutInflater().inflate(R.layout.child, null);
item.addView(child);

Andere Tipps

Sie eine XML-Ressource aufzublasen. Sehen Sie sich die LayoutInflater doc .

Wenn Ihr Layout ist in einem mylayout.xml , würden Sie so etwas wie:

View view; 
LayoutInflater inflater = (LayoutInflater)   getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
view = inflater.inflate(R.layout.mylayout, null);

RelativeLayout item = (RelativeLayout) view.findViewById(R.id.item);

Obwohl spät Antwort, aber möchte, dass ein Weg, um hinzufügen, um dieses

zu bekommen
LayoutInflater layoutInflater = (LayoutInflater)this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View view = layoutInflater.inflate(R.layout.mylayout, item );

wo item ist die Mutter Layout, in dem Sie ein Kind Layout hinzufügen möchten.

Es ist hilfreich, um dies zu schreiben, auch wenn es eine alte Post, dass, wenn das Kind Ansicht, die von xml aufgeblasen wird, ist zu einem Viewgroup Layout hinzugefügt werden, müssen Sie Anruf aufblasen mit einer Ahnung von dem, was Art von Viewgroup es wird hinzugefügt werden. Wie:

View child = getLayoutInflater().inflate(R.layout.child, item, false);

Die aufblasen Methode ist ziemlich überlastet und beschreibt diesen Teil der Nutzung in der Dokumentation. Ich hatte ein Problem, bei dem eine einzelne Ansicht von xml aufgeblasen wurde nicht richtig in den übergeordneten Ausrichtung, bis ich diese Art von Änderung vorgenommen habe.

Noch einfache Art und Weise verwenden

View child = View.inflate(context, R.layout.child, null)
item.addChild(child) //attach to your item

Layout Inflation

View view = null;
LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
view = inflater.inflate(R.layout.mylayout, null);
main.addView(view);

Wenn Sie nicht in einer Tätigkeit sind Sie die statische from() Methode aus der LayoutInflater-Klasse verwenden, können eine LayoutInflater zu bekommen, oder fordern Sie den Service aus dem Kontext Methode getSystemService() auch:

LayoutInflater i;
Context x;       //Assuming here that x is a valid context, not null

i = (LayoutInflater) x.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
//OR
i = LayoutInflater.from(x);

(Ich weiß, dass es fast 4 Jahre her, aber immer noch Erwähnenswert)

Wenn Sie eine einzelne Ansicht mehr Zeit hinzufügen, dann haben Sie zu verwenden

   layoutInflaterForButton = getActivity().getLayoutInflater();

 for (int noOfButton = 0; noOfButton < 5; noOfButton++) {
        FrameLayout btnView = (FrameLayout) layoutInflaterForButton.inflate(R.layout.poll_button, null);
        btnContainer.addView(btnView);
    }

Wenn Sie das tun, wie

   layoutInflaterForButton = getActivity().getLayoutInflater();
    FrameLayout btnView = (FrameLayout) layoutInflaterForButton.inflate(R.layout.poll_button, null);

und

for (int noOfButton = 0; noOfButton < 5; noOfButton++) {
            btnContainer.addView(btnView);
        }

, dann wird es Ausnahme alle bereit hinzugefügt Ansicht werfen.

AttachToRoot Set auf True

Man denke nur wir eine Schaltfläche in einer XML-Layout-Datei mit Layoutbreite und das Layout Höhe Satz match_parent angegeben.

<Button xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/custom_button">
</Button>

Auf dieser Buttons Ereignis klicken wir auf dieser Aktivität folgenden Code aufzublasen-Layout festlegen.

LayoutInflater inflater = LayoutInflater.from(getContext());
inflater.inflate(R.layout.yourlayoutname, this);

Hope diese Lösung funktioniert für Sie.

Ich hatte die härteste Zeit mit diesem Fehler, wegen meiner einzigartigen Umstände, aber endlich eine Lösung gefunden.

Meine Situation: Ich verwende eine separate Ansicht (XML), die eine WebView hält, öffnet sich dann in einem AlertDialog wenn ich eine Taste in meiner Haupttätigkeit Ansicht klicken. Aber irgendwie oder andere die WebView zur Haupttätigkeit Ansicht gehörte (wahrscheinlich, weil ich die Ressource von hier ziehen), so kurz bevor ich es meinem AlertDialog (als Ansicht) zugeordnet ist, hatte ich die Eltern meiner WebView zu erhalten, setzen Sie es in eine ViewGroup, dann entfernen Sie alle Ansichten auf diesem ViewGroup. Das funktionierte, und mein Fehler ging weg.

// set up Alert Dialog box
AlertDialog.Builder alert = new AlertDialog.Builder(this);
// inflate other xml where WebView is
LayoutInflater layoutInflater = (LayoutInflater)this.getSystemService
                (Context.LAYOUT_INFLATER_SERVICE);
View v = layoutInflater.inflate(R.layout.your_webview_layout, null);
final WebView webView = (WebView) v.findViewById(R.id.your_webview_id);

// more code...

.... später, nachdem ich lud meine WebView ....

// first, remove the parent of WebView from it's old parent so can be assigned a new one.
ViewGroup vg = (ViewGroup) webView.getParent();
vg.removeAllViews();

// put WebView in Dialog box
alert.setView(webView);
alert.show();

Wenn Sie Sie versuchen, ein Kind Blick auf die RelativeLayout zu befestigen? Sie können durch folgende

tun
RelativeLayout item = (RelativeLayout)findViewById(R.id.item);
View child = getLayoutInflater().inflate(R.layout.child, item, true);

Versuchen Sie diesen Code ein:

  1. Wenn Sie wollen einfach nur Ihr Layout aufzublasen:

View view = LayoutInflater.from(context).inflate(R.layout.your_xml_layout,null); // Code for inflating xml layout
RelativeLayout item = view.findViewById(R.id.item);   

  1. Wenn Sie Ihr Layout in Container (Eltern-Layout) aufzublasen:

LinearLayout parent = findViewById(R.id.container);        //parent layout.
View view = LayoutInflater.from(context).inflate(R.layout.your_xml_layout,parent,false); 
RelativeLayout item = view.findViewById(R.id.item);       //initialize layout & By this you can also perform any event.
parent.addView(view);             //adding your inflated layout in parent layout.

Mit Kotlin, können Sie:

val content = LayoutInflater.from(context).inflate(R.layout.[custom_layout_name], null)

[your_main_layout].apply {
    //..
    addView(content)
}

ich unter Code-Snippet für diese benutzt hatte, und es funktioniert für mich.

LinearLayout linearLayout = (LinearLayout)findViewById(R.id.item);
View child = getLayoutInflater().inflate(R.layout.child, null);
linearLayout.addView(child);

brauchen keine jede mögliche Komplexität es nur einfach wie

 setContentView(R.layout.your_layout);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top