2010-10-25 10 views
12

Gibt es eine Möglichkeit, setContentView (id) mehrmals mit einer anderen ID aufzurufen, um verschiedene Ansichten zu rendern oder muss ich unbedingt eine neue Aktivität starten?SetContentView() mehrmals aufrufen

Antwort

10

Per Austyn Kommentar, ich habe es geschafft, einige Hinweise zu finden, wie ViewFlipper zu verwenden, um dies in einem anderen Beitrag zu erreichen (siehe für die aktivierten Top-Antwort here.)

Wenn Sie ViewFlipper nicht verwenden möchten, ich ein schönes Beispiel gefunden, wie here zwischen Layout in der gleichen Ansicht wechseln:

XML:

<FrameLayout 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    xmlns:android="http://schemas.android.com/apk/res/android"> 
    <ImageView 
     android:src="@drawable/icon" 
     android:scaleType="fitCenter" 
     android:layout_height="fill_parent" 
     android:layout_width="fill_parent"/> 
    <TextView 
     android:text="Learn-Android.com" 
     android:textSize="24sp" 
     android:textColor="#000000" 
     android:layout_height="fill_parent" 
     android:layout_width="fill_parent" 
     android:gravity="center"/> 
</FrameLayout> 

Code:

private void SwitchLayout2() { 
RelativeLayout Layout1 = (RelativeLayout)findViewById(R.id.layout1); 
RelativeLayout Layout2 = (RelativeLayout)findViewById(R.id.layout2); 

// Enable Layout 2 and Disable Layout 1 
Layout1 .setVisibility(View.GONE); 
Layout2.setVisibility(View.VISIBLE); 
} 

private void SwitchLayout1() { 
RelativeLayout Layout1 = (RelativeLayout)findViewById(R.id.layout1); 
RelativeLayout Layout2 = (RelativeLayout)findViewById(R.id.layout2); 

// Enable Layout 1 & Disable Layout2 
Layout1.setVisibility(View.VISIBLE); 
Layout2.setVisibility(View.GONE); 
} 
+4

Sie sollten wirklich eine 'ViewFlipper' verwenden, um dies zu tun und nicht nur die Sichtbarkeit auf jedem' View' –

+1

@AustynMahoney ändern, wäre es toll zu wissen, warum es am besten ist, einen ViewFlipper anstelle von Glenviewjeff zu verwenden beschriebene Methode. – user438293456

+0

Warum möchten Sie das Rad neu erfinden, wenn Android bereits eine sehr einfache Möglichkeit bietet, genau das zu erreichen? Was passiert, wenn Sie diese auf 3 Layouts oder vielleicht 18 erweitern möchten? Wenn du 'ViewFlipper' benutzt hast, ist es ganz einfach, wenn du nicht viel Glück hast, diese Code-Basis zu pflegen. –

4

Nein, Sie können es nicht einfach mehrmals aufrufen. Sie müssen entweder alle Ansichten vollständig entfernen und dann das neue Layout aufblasen, oder verwenden Sie eine ViewFlipper (oder FrameLayout), um zwischen verschiedenen Ansichten zu wechseln.

Auf eine Randnotiz wurde diese Frage schon einmal gestellt, obwohl ich sie nicht sofort finden konnte.

0

können Sie versuchen, diese von Ihrer Aktivität:

getWindow().addContentView(View, ViewGroup.LayoutParams); 

Die beiden Inhalt Ansicht, die eine auf dem anderen sein wird. Aber es gibt keine direkte Möglichkeit, eine bestimmte, auf diese Weise hinzugefügte Ansicht zu entfernen.

Beachten Sie auch, dass das Aufrufen von setContentView nach dem letzten Anruf alle zuvor hinzugefügten Inhaltsansichten entfernt.

Verwandte Themen