2015-04-25 127 views
0

我想顯示3秒的啓動畫面,然後轉到主屏幕,兩個人都在同一個班級。然而,我的問題是,當我嘗試調用新的layout.activity之前,類Im的原始layout.acitity,程序崩潰。爲什麼?Android:從一個佈局活動切換到另一個

下面是我在說什麼的一個小例子:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_splash);//new activity 
    displaySplash(); 

    setContentView(R.layout.activity_visualizer);//original activity 

,我能得到這個運行的是,如果我完全註釋掉飛濺活動的唯一方法,但我需要它!我不會工作,如果我註釋掉其他佈局活動......

這裏是我的兩個活動,如果有幫助:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:orientation="vertical" 
android:background="#000000" 
tools:context="comp380.musicvisualizer.Visualizer" > 

<ListView 
    android:id="@+id/song_list" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" > 
</ListView> 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:orientation="vertical" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:background="#000000" 
tools:context="comp380.musicvisualizer.Visualizer" > 

<ImageView 
    android:id="@+id/splashscreen" 
    android:layout_width="wrap_content" 
    android:layout_height="fill_parent" 
    android:src="@drawable/logo" 
    android:layout_gravity="center"/> 

+0

我也嘗試過使用ViewFlipper,但仍然沒有運氣 –

回答

1

我會試圖將它們作爲碎片並在它們之間切換。然而,如果你不想這樣做,你可以在同一個佈局中擁有兩個視圖,並在三秒後更改可見性。你的看法是:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:orientation="vertical" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:background="#000000" 
tools:context="comp380.musicvisualizer.Visualizer" > 

<ImageView 
    android:id="@+id/splashscreen" 
    android:layout_width="wrap_content" 
    android:layout_height="fill_parent" 
    android:src="@drawable/logo" 
    android:layout_gravity="center"/> 

<ListView 
    android:id="@+id/song_list" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:visibility="gone" > 
</ListView> 

然後在活動做這樣的事情:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_layout); //the layout above 

    displaySplash(); // I guess this waits three seconds 

    // get refs to the views 
    ImageView splashScreen = (ImageView) findViewById(R.id.splashscreen); 
    ListView songList = (ListView) findViewById(R.id.song_list); 

    // swap the visibility 
    splashScreen.setVisibility(View.GONE); 
    songList.setVisibility(View.VISIBLE); 

} 
0

爲什麼不使用相同的他們兩個的佈局,並把它們放入FrameLayout,3秒後隱藏飛濺佈局,並顯示正常的佈局?

你也可以創建兩個片段,一個SplashFragment和另一個NomralFragment,並在3秒後交換它們,如果你真的想在同一個類中做到這一點。

0

對於Activity,您不能撥打setContentView()兩次。

一個可能的解決方案是將啓動畫面的佈局放置在您的原始活動所在的同一地點並管理其可見性。

否則,你可以有一個閃屏活動R.layout.activity_splash的佈局和3秒後啓動您主要活動

+0

我會怎麼做第一個選項?我試着做第二個選項,但是我的代碼仍然崩潰... –

+0

請嘗試第一個選項時向我們展示崩潰日誌 – dora

0

我只是想出了我的問題,你們永遠猜不到吧:我的代碼是失敗,因爲圖片我用於我的啓動畫面太大了。我隨機更改了照片,現在一切正常......巨大的SIGH

謝謝大家試試!

相關問題