下面是我到我项目的MainActivity.java中的代码,这是我的应用程序的欢迎界面,仅当用户打开应用程序时才会出现。否则,用户应该可以看到Medicine_Activity.java,当用户按下MainActivity上的“入门”按钮时也会触发该信息。为了实现这一点,我遇到了一种称为SharedPreferences的东西,并试图实现它。但是它没有按预期工作,在启动Medicine_Activity之前,MainActivity会闪烁一秒钟。我是新来的,请帮帮我
以下是一个视频片段,用于查看此错误的实际操作-https://www.dropbox.com/s/fqbo9urb6xnh3pd/WhatsApp%20Video%202019-06-20%20at%202.12.50%20PM.mp4?dl=0
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
Button btnGetStarted;
@Override
protected void onCreate(Bundle savedInstanceState) {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
boolean previouslyStarted = prefs.getBoolean(getString(R.string.pref_previously_started), false);
if(!previouslyStarted) {
SharedPreferences.Editor edit = prefs.edit();
edit.putBoolean(getString(R.string.pref_previously_started), Boolean.TRUE);
edit.apply();
} else{
Intent intent = new Intent(this, Medicine_Activity.class);
startActivity(intent);
}
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE); //will hide the title
getSupportActionBar().hide(); // hide the title bar
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN); //enable full screen
setContentView(R.layout.activity_main);
Button btnGetStarted = findViewById(R.id.btnGetStarted);
btnGetStarted.setOnClickListener(this);
}
@Override
public void onClick(View v) {
Intent intent = new Intent(this, Medicine_Activity.class);
startActivity(intent);
}
}
答案 0 :(得分:0)
在存储{{1}的commit()
和true
的同时使用finish()
。
MainActivity
简短说明:if(!previouslyStarted) {
SharedPreferences.Editor edit = prefs.edit();
edit.putBoolean(getString(R.string.pref_previously_started), true);
edit.commit();
} else{
Intent intent = new Intent(this, Medicine_Activity.class);
startActivity(intent);
finish();
}
同步写入数据(阻塞从其调用的线程)。然后它会通知您有关操作成功的信息。但是,commit()
计划将数据异步写入。它不会通知您有关操作成功的信息。
与commit()会将其首选项同步写到持久性存储中的方法不同,apply()立即将其更改提交到内存中的SharedPreferences,但会启动对磁盘的异步提交,并且不会收到任何失败的通知>