Android:从一个布局活动切换到另一个布局活动

时间:2015-04-25 20:23:30

标签: android xml android-layout android-activity android-studio

我试图在3秒内显示启动画面,然后转到主屏幕,两者都在同一个类中。但是,我的问题是,当我尝试调用新的layout.activity时,在类Im的原始layout.acitity之前,程序崩溃了。为什么呢?

以下是我所谈论的一个小例子:

 @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"/>

4 个答案:

答案 0 :(得分: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>

然后在Activity中执行类似的操作:

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

}

答案 1 :(得分:0)

为什么不对它们使用相同的布局并将它们放入FrameLayout,3秒后隐藏初始布局并显示正常布局?

你也可以创建两个片段,一个是SplashFragment,另一个是NomralFragment,如果你真的想在同一个类中做这个,你可以在3秒后交换它们。

答案 2 :(得分:0)

您无法为setContentView()致电Activity两次。

一种可能的解决方案是将启动画面的布局放在原始活动所在的同一位置,并管理其可见性。

否则,您可以使用R.layout.activity_splash作为布局进行启动画面活动,并在3秒后启动主要活动

答案 3 :(得分:0)

我刚刚发现了我的问题而且你们不会猜到它们:我的代码失败了,因为我用于启动画面的图片太大了。我随机改变了图片,现在一切正常......巨大的声音

谢谢大家的尝试!