2011-12-21 9 views
21

ho un problema. Sviluppo un'applicazione Android.Come posso modificare il layout xml incluso in un altro layout su codice java?

Ho incluso secondo layout al primo layout in questo modo:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="300dp" 
    android:layout_height="match_parent" 
    android:layout_gravity="clip_horizontal" 
    android:layout_alignParentLeft="true" 
    android:id="@+id/rlMenu" 
    > 

    <Button 
     android:id="@+id/bMusteriler" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:text="Musteriler" 
     android:textSize="45dp" 
     android:layout_alignParentLeft="true" 
     /> 

</RelativeLayout> 

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="match_parent" 
    android:layout_toRightOf="@id/rlEkranlar" 
    > 

    <include 
     android:id="@+id/include1" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     layout="@layout/ikinci" /> 

</RelativeLayout> 
</RelativeLayout> 

problema è come posso cambiare il layout incluso quando si fa clic su un pulsante (sul codice Java)?

Ci scusiamo per il mio inglese. Grazie.

+0

creare un nuovo file XML e di attività e chiamare la seconda attraverso l'intento. –

+0

per favore modifica la tua domanda, non è molto chiara. –

+0

@YugandharBabu Voglio cambiare layout = "@ layout/ikinci" per layout = "@ layout/third_layout" quando si fa clic sul pulsante. – UurYsr

risposta

51

Suggerisco ViewFlipper all'interno di RelativeLayout delle dichiarazioni include. Prova in questo modo:

<ViewFlipper xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/vf" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" > 

    <include android:id="@+id/include1" layout="@layout/ikinci" /> 
    <include android:id="@+id/map" layout="@layout/third_layout" /> 

</ViewFlipper> 

Accedi ViewFlipper come di seguito. Inizialmente primo layout è uscita:

ViewFlipper vf = (ViewFlipper)findViewById(R.id.vf); 

Per Button onClickListener:

button.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       vf.setDisplayedChild(1); 
      } 
     }); 
+0

Grazie mille. Hai risolto il problema =)) – UurYsr

+0

Se hai ricevuto la risposta, contrassegnala. sei il benvenuto amico –

+0

Penso di averlo fatto, grazie ancora. – UurYsr

0

Hai provato a ottenere l'istanza della vista corrente dell'XML che hai incluso l'altro xml e usa findViewById(). View v è il primo layout e contro questo punto di vista si utilizza .findViewById()

+0

ho provato questo: Layout L1 = (Layout) findViewById (R.id.layout1); C'è errore di conversione. Impossibile convertire View to Layout. Sto facendo qualcosa di sbagliato? – UurYsr

+0

Layout? Non c'è una tale vista nell'SDK finché ne hai creato la tua. Assicurati di aver fatto correttamente riferimento ai nomi delle classi. Come: LinearLayout, RelativeLayout, FrameLayout .... –

+0

Capisco, ci proverò. Grazie – UurYsr

20

Ci sono due modi per cambiare layout in codice:

A. modificare la visibilità. Includere traino diversi layout nella vostra xml:

<include 
    android:id="@+id/id1" 
    android:visibility="visible"/> 
<include 
    android:id="@+id/id2" 
    android:visibility="gone"/> 

e in uso di codice questo:

findViewById(R.id.id1).setVisibility(View.GONE); 
findViewById(R.id.id2).setVisibility(View.VISIBLE); 

B. aggiungere manualmente i bambini. Utilizzare lo stesso xml come si usa ora e aggiungi in codice è possibile aggiungere o eliminare i bambini:

yourRelativeLayout.removeAllViews(); 
yourRelativeLayout.addView(viewToInclude); 

offtopic:

Non è necessario scrivere xmlns:android param in RelativeLayout. Solo per il tag più in alto nel file di layout.

+0

Grazie @ Jin35, ho provato la tua soluzione e ha risolto. – UurYsr

+3

Ero confuso perché Intellij 14 non offre "visibilità" nelle opzioni di completamento automatico. –