6

我有以下类SplashActivity.java

public class SplashScreen extends Activity{

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);

        setContentView(R.layout.splash);
        Thread timer = new Thread(){
            public void run(){
                try{
                    sleep(5000);
                }catch(InterruptedException e)
                {
                    e.printStackTrace();
                }
                finally{
                    Intent tutorial = new Intent(SplashScreen.this, TutorialOne.class);
                    startActivity(tutorial);
                }

            }
        };
        timer.start();
          }
}

我希望这个活动只加载一次,当应用程序第一次安装在移动设备上时。作为android的新手,我对此知之甚少。我在SharedPreferences要使用的地方阅读,但不了解实现。关于这个活动的事情是,活动必须在第一次使用时充当一个Launcher,这让我很困惑。因为在清单文件中,我声明了另一个活动,在我的情况下是MainPage.java. 那么我该如何实现这个逻辑呢?我是否呼吁或是否有其他必须做SplashActivityMainPage事情?请帮助某人?

如果可能的话,有人可以写下代码来实现这个逻辑吗?

4

2 回答 2

24

将此代码添加到您的 onCreate 方法

    SharedPreferences pref = getSharedPreferences("ActivityPREF", Context.MODE_PRIVATE);
    if(pref.getBoolean("activity_executed", false)){
        Intent intent = new Intent(this, TutorialOne.class);
        startActivity(intent);
        finish();
    } else {
        Editor ed = pref.edit();
        ed.putBoolean("activity_executed", true);
        ed.commit();
    }

除非您从 Android 上的“设置”中清除数据,否则每次执行应用程序时都会保留 SharedPreferences。第一次将从保存在此类首选项 (ActivityPREF) 上的布尔值 (activity_executed) 中获取值。

如果它没有找到任何值,它将返回 false,因此我们必须编辑首选项并将值设置为 true。下一次执行将启动活动TutorialOne

finish()从堆栈历史记录中删除当前活动,因此无法使用 TutorialOne 中的返回按钮返回。

关于您的清单,您可以使用

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

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

每次执行应用程序时都会启动此活动,但由于设置为 true"activity_executed"将启动一个新的活动startActivity

于 2013-05-07T13:04:07.583 回答
0
 SharedPreferences pref = getSharedPreferences("ActivityPREF",    Context.MODE_PRIVATE);
     if(pref.getBoolean("activity_executed", false)){

} else { 
   Intent intent = new Intent(this, TutorialOne.class);
    startActivity(intent);
    finish();
    Editor ed = pref.edit();
    ed.putBoolean("activity_executed", true);
    ed.commit();
} 

我认为应该是这样的。

于 2016-09-23T07:57:16.653 回答