Wie man eine Ansicht mit einem Layout aufzublasen

Ich habe ein in XML definiertes Layout. 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-Dateien aufblasen. Ich kann je nach Situation unterschiedliche Layouts verwenden. Wie soll ich das machen? Ich habe versucht, verschiedene Variationen von

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

Aber keiner von ihnen hat gut geklappt.

  • Einstellen von Text auf mehrfach aufgeblasenen EditTexts bewirkt, dass alle nach der Rotation mit demselben Text gefüllt werden
  • Wie bekomme ich die Eingabe von einem Pop-up-Fenster
  • Android: Letzte Zeile der Textansicht abgeschnitten
  • OnCreateOptionsMenu in Fragmenten
  • Duplicate Views auf Android während der Laufzeit
  • Warum Inflater in Listenansicht verwenden
  • Wie man ein anderes Layout in getView () von gridview Adapter in Android aufblasen?
  • Android.view.InflateException: Binäre XML-Datei Zeile # 7: Fehler beim Aufblasen der Klasse
  • 11 Solutions collect form web for “Wie man eine Ansicht mit einem Layout aufzublasen”

    Ich bin mir nicht sicher, ob ich deiner Frage gefolgt bin – versuchst du, dem RelativeLayout eine Kinderansicht zuzuordnen? Wenn ja, wollen Sie etwas im Sinne von:

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

    Sie blasen eine XML-Ressource auf. Siehe das LayoutInflater doc .

    Wenn Ihr Layout in einer mylayout.xml ist , 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äte Antwort, aber möchte, dass eine Möglichkeit, dies zu bekommen hinzuzufügen

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

    Wobei item das übergeordnete Layout ist, in dem Sie ein untergeordnetes Layout hinzufügen möchten.

    Es ist hilfreich, dies hinzuzufügen, obwohl es ein alter Post ist, dass, wenn die untergeordnete Ansicht, die von xml aufgeblasen wird, zu einem Viewgroup-Layout hinzugefügt werden soll, müssen Sie aufblasen mit einer Ahnung, welche Art von Viewgroup es geht Hinzugefügt werden. Mögen:

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

    Die Aufblasmethode ist ziemlich überlastet und beschreibt diesen Teil der Nutzung in den docs. Ich hatte ein Problem, bei dem eine einzelne Ansicht, die von xml aufgeblasen wurde, sich nicht ordnungsgemäß auseinandersetzte, bis ich diese Art von Veränderung machte.

    Noch einfacher ist zu bedienen

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

    Wenn Sie nicht in einer Aktivität sind, können Sie die statische from() -Methode aus der LayoutInflater Klasse verwenden, um einen LayoutInflater , oder fordern Sie den Dienst aus der Kontextmethode getSystemService() :

     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ß, es ist fast 4 Jahre her, aber immer noch erwähnenswert)

    Layout Inflation

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

    Überprüfe diesen Link. Es hat die Antwort-> https://possiblemobile.com/2013/05/layout-inflation-as-intended/

    Ich hatte die härteste Zeit mit diesem Fehler, wegen meiner einzigartigen Umstände, aber schließlich fand eine Lösung.

    Meine Situation: Ich verwende eine separate Ansicht (XML), die eine WebView , und öffnet dann in einem AlertDialog wenn ich auf eine Schaltfläche in meiner Hauptaktivitätsansicht AlertDialog . Aber irgendwie gehörte das WebView zur Hauptaktivitätsansicht (vermutlich weil ich die Ressource von hier aus ziehe), also genau bevor ich es meinem AlertDialog (als Ansicht) zugewiesen habe, musste ich das Elternteil von meinem WebView bekommen In eine ViewGroup , dann entfernen Sie alle Ansichten auf dieser 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 mein WebView geladen habe ….

     // 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 eine einzelne Ansicht mehrfach hinzufügen möchten, dann müssen Sie 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 du es magst

      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 eine Ausnahme von allen fertigen addierten Ansicht werfen.

    Ich hatte unten Code von Code verwendet und das hat für mich gearbeitet.

     LinearLayout linearLayout = (LinearLayout)findViewById(R.id.item); View child = getLayoutInflater().inflate(R.layout.child, null); linearLayout.addView(child); 
    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.