如何从启动页面转换到主要活动?

时间:2013-11-19 16:37:44

标签: java android eclipse splash-screen android-lifecycle

目前,我的应用加载启动画面并保持这种状态。我认为我的主要问题是Android生命周期。我将启动页面作为onCreate,主要活动(从私人决赛开始,下面)也是onCreate,但我不认为这是正确的。此外,每个活动都在一个java文件中。它是否正确?如何让我的启动页面加载,自杀,然后加载我的主要活动?

这是我的MainActivity.java:

package com.deliveryfor;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import com.google.android.gms.maps.CameraUpdate;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.MapFragment;
import com.google.android.gms.maps.model.LatLng;

public class MainActivity extends Activity {

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.splash); 

        Thread Timer = new Thread() { 
            public void run() { 
                try { sleep(3000); 

                startActivity (new Intent ("android.intent.action.SPLASH")); 


                } catch (InterruptedException e) { 
                    e.printStackTrace(); 

                } 

                finally { 

                    finish(); 

                } 

            } 

        }; 

        Timer.start(); 

    }

    private final LatLng LOCATION_STATE = new LatLng(49.27645, -122.917587);
    private final LatLng LOCATION_CITY = new LatLng(49.187500, -122.849000);
    private final LatLng LOCATION_YOU = new LatLng(49.187500, -122.849000);

    private GoogleMap map;



    protected void onCreate() {
        super.onCreate(null);
        setContentView(R.layout.activity_main);

        map  = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap();

        map.setMyLocationEnabled(true);

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    public void onClick_State(View v) {
        map.setMapType(GoogleMap.MAP_TYPE_HYBRID);
        CameraUpdate update = CameraUpdateFactory.newLatLngZoom(LOCATION_YOU, 9);
        map.animateCamera(update);
    }
    public void onClick_City(View v) {
        map.setMapType(GoogleMap.MAP_TYPE_TERRAIN);
        CameraUpdate update = CameraUpdateFactory.newLatLngZoom(LOCATION_CITY, 16);
        map.animateCamera(update);

    }
    public void onClick_You(View v) {
        map.setMapType(GoogleMap.MAP_TYPE_NORMAL);
        CameraUpdate update = CameraUpdateFactory.newLatLngZoom(LOCATION_STATE, 18);
        map.animateCamera(update);

    }

}

这是Menu.java(启动页面):

package com.deliveryfor;

import android.app.Activity;
import android.os.Bundle;

public class Menu extends Activity { 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView (R.layout.splash); }




    }

4 个答案:

答案 0 :(得分:2)

您必须将Splash Activity创建为经典活动,并且必须在Manifest中声明它将是第一个启动的活动。 将此行添加到活动启动标记中:

<intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>

然后,在SplashActivity.java的onCreate()中,添加自动启动MainActivity的代码。 我像这样使用TimerTask:

Timer timer = new Timer();
        timer.schedule(new TimerTask(){

            @Override
            public void run() {
                // TODO Auto-generated method stub

                Intent toHomePage = new Intent(context,MainActivity.class);
                startActivity(toHomePage);
                finish();
            }}, 5000);

5000表示Intent toHomePage将在5秒后启动。 希望它能帮到你!

答案 1 :(得分:1)

您需要创建一个Intent来启动MainActivity。现在,Menu的代码除了创建UI之外什么也没做。 official documentation描述了如何执行此操作。

你需要这样的东西:

Intent intent = new Intent(this, MainActivity.class);
startActivity(intent);

您可能还想重新考虑使用启动画面,除非您有令人信服的理由(似乎并非如此)。有关详细信息,请阅读this blog帖子。这是我觉得非常有趣的摘录:

  

启动画面可用于在资源可用之前提供资源   申请开始。我个人认为98%的人没必要   案件。它可能对积极依赖沉重的应用程序有用   谷歌地球,天空地图或游戏等资源,但事实并非如此   适用于简单的实用程序应用程序,如feed阅读器,社交   网络应用程序,新闻阅读器等。您不应该需要网络   启动时的连接也不会进行繁重的计算。

答案 2 :(得分:1)

我这样使用它:

public class SplashActivity extends Activity{
    private final static long SPLASH_TIME_OUT = 2000;

    // SplashActivity --> serves as entry-point for the app at several situations
    @Override
    protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_splash);                      
         new Handler().postDelayed(new Runnable() {

              @Override
              public void run() {

                Intent i = new Intent(SplashActivity.this, RegisterActivity.class);
                startActivity(i);
                // close this activity
                finish();
              }
        }, SPLASH_TIME_OUT);
    }   
}

答案 3 :(得分:0)

我将此活动作为MainActivity.java添加到第一页:

public class MainActivity extends AppCompatActivity {
    oAuth_Model oAuth_model;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);

        showBasicSplash();
    }
    private void showBasicSplash() {
        new Thread(){
            @Override
            public void run() {
                super.run();

                try {
                    Thread.sleep(1500);
                    handler.sendEmptyMessage(0);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }.start();
    }

    @SuppressLint("HandlerLeak")
    Handler handler = new Handler(){
        public void handleMessage(Message m){
            if (getBoolean(Constant.AFTERLANG)){
                Intent intent = new Intent(MainActivity.this, Landing_three.class);
                startActivity(intent);
                finish();
            }else {
                Intent intent = new Intent(MainActivity.this, Activity_Sec.class);
                startActivity(intent);
                finish();
            }
        }
    };
}

并将此活动添加到Manifests.xml中:

<activity android:name=".MainActivity"
        android:configChanges="orientation"
        android:screenOrientation="portrait">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

并打算进行其他活动后杀死Mainactivity。

finish();