Domanda

Ho un layout definito in XML. Contiene inoltre:

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

Vorrei a gonfiare questo RelativeView con altri file di layout XML. Posso utilizzare i layout diversi a seconda di una situazione. Come devo fare? Stavo provando diverse varianti di

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

Ma nessuno di loro ha funzionato bene.

È stato utile?

Soluzione

Non sono sicuro che ho seguito il tuo Question- stai cercando di collegare una vista bambino al RelativeLayout? Se così si vuole fare qualcosa sulla falsariga di:

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

Altri suggerimenti

Si gonfia una risorsa XML. Vedere la LayoutInflater doc .

Se il layout è in una mylayout.xml , si potrebbe fare qualcosa di simile:

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);

Anche se la risposta in ritardo, ma vorrei aggiungere che un modo per ottenere questo

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

dove item è il layout principale in cui si desidera aggiungere un layout bambino.

E 'utile aggiungere a questo, anche se è un vecchio post, che se la vista del bambino che viene gonfiato da XML deve essere aggiunto a un layout viewgroup, è necessario chiamare gonfiare con un indizio di ciò che tipo di viewgroup che sta per essere aggiunto. Come:

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

Il metodo è abbastanza gonfiare sovraccarico e descrive questa parte l'utilizzo nei documenti. Ho avuto un problema in cui una singola vista gonfiato da XML non è stato allineando nel genitore correttamente fino a quando ho fatto questo tipo di cambiamento.

modo Ancora più semplice è quello di utilizzare

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

inflazione Layout

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

Se non sei in un'attività è possibile utilizzare il metodo statico from() dalla classe LayoutInflater per ottenere un LayoutInflater, o richiedere il servizio dal metodo contesto getSystemService() troppo:

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);

(lo so che è quasi 4 anni fa, ma ancora degno di nota)

Se si desidera aggiungere una sola visione in tempo multiplo allora bisogna usare

   layoutInflaterForButton = getActivity().getLayoutInflater();

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

Se lo fai come

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

e

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

allora getterà eccezione di tutti vista aggiunto pronti.

AttachToRoot Impostare a True

Basta pensare che abbiamo specificato un pulsante in un file di layout XML con la sua larghezza e il layout layout di altezza impostato match_parent.

<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>

In questa Bottoni Clicca Evento possiamo impostare seguente codice per gonfiare layout a questa attività.

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

La speranza questa soluzione funziona per voi.!

ho avuto il momento più difficile con questo errore, a causa delle mie circostanze uniche, ma finalmente trovato una soluzione.

La mia situazione: Sto usando una vista separata (XML) che detiene una WebView, poi si apre in un AlertDialog quando si fa clic su un pulsante nel mio principale vista attività. Ma in qualche modo o in un altro il WebView apparteneva alla vista attività principale (probabilmente perché ho tirare la risorsa da qui), quindi a destra prima ho assegnato al mio AlertDialog (come vista), ho dovuto ottenere il padre del mio WebView, metterlo in un ViewGroup, quindi rimuovere tutti i punti di vista su quel ViewGroup. Questo ha funzionato, e il mio errore è andato via.

// 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...

.... più tardi dopo che ho caricato la mia 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();

Se stai cercando di collegare una vista bambino al RelativeLayout? si può fare seguendo

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

Prova questo codice:

  1. Se si desidera solo per gonfiare il layout:

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. Se si vuole gonfiare il layout in contenitore (layout di genitore):

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.

Con Kotlin, è possibile utilizzare:

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

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

avevo usato sotto frammento di codice per questo e ha funzionato per me.

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

Non necessita di nessuna complessità è proprio semplice come

 setContentView(R.layout.your_layout);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top