我一直在尝试实现一个只会在应用程序首次启动时出现的活动。为此,我创建了以下 LaunchManager 类:
package com.example.mylist;
import android.content.Context;
import android.content.SharedPreferences;
//Class to manage launching activities
//(to make the slider appear only on first launch)
public class LaunchManager {
SharedPreferences sharedPreferences;
SharedPreferences.Editor editor;
private static String PREF_NAME = "LaunchManger";
private static String IS_FIRST_TIME = "isFirst";
public LaunchManager(Context context) {
sharedPreferences = context.getSharedPreferences(PREF_NAME, 0);
editor = sharedPreferences.edit();
}
public void setFirstLaunch(boolean isFirst) {
editor.putBoolean(IS_FIRST_TIME, isFirst);
editor.commit();
}
public boolean isFirstTime() {
return sharedPreferences.getBoolean(IS_FIRST_TIME, true);
}
}
它的最后一个方法 isFirstTime 返回不允许执行的空值。
这是我的启动器活动:
package com.example.mylist;
import androidx.appcompat.app.AppCompatActivity;
import androidx.constraintlayout.widget.ConstraintLayout;
import android.content.Intent;
import android.graphics.drawable.AnimationDrawable;
import android.os.Bundle;
import android.os.Handler;
import com.example.mylist.databinding.ActivityMainBinding;
import com.example.mylist.databinding.ActivitySplashScreenBinding;
public class SplashScreenActivity extends AppCompatActivity {
ActivitySplashScreenBinding binding;
LaunchManager launchManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//view binding
binding = ActivitySplashScreenBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
//animated background
AnimationDrawable animationDrawable =
(AnimationDrawable) binding.rlSplashScreen.getBackground();
animationDrawable.setEnterFadeDuration(2000);
animationDrawable.setExitFadeDuration(4000);
animationDrawable.start();
//setting time and intents
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
/* if(launchManager.isFirstTime()) {
launchManager.setFirstLaunch(false);
startActivity(new Intent(getApplicationContext(),
SliderScreenActivity.class));
}
else { */
startActivity(new Intent(getApplicationContext(),
MainActivity.class));
//}
}
}, 1500);
}
}
注释代码调用 LaunchManager 类。这可能与我在其他活动中使用的 ViewBinding 有关,并且没有在启动管理器中指定,如果是那么如何实现呢?
请帮我解决这个问题。