java - 重新启动应用程序后,再次显示入职屏幕
问题描述
这是载入片段 3.in 的代码在此代码中,我已将单击侦听器设置为浮动操作按钮 fb 并尝试保存单击按钮的状态。
public class onBoardinFragment3 extends Fragment {
FloatingActionButton fab;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
ViewGroup root = (ViewGroup) inflater.inflate(R.layout.fragment_onboarding3, container,false);
**fab = root.findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(getActivity(), MainActivity.class);
startActivity(intent);**
**SharedPreferences prf = getActivity().getApplicationContext().getSharedPreferences("mypref",MODE_PRIVATE);
SharedPreferences.Editor editor = prf.edit();
editor.putBoolean("isOpened",true);
editor.commit();**
}
});
return root;
}
}
这是介绍活动的代码。单击入职片段 3 中的浮动按钮后,isIntroductoryOpened 的值不会变为 false。
public class IntroductoryActivity extends AppCompatActivity {
ImageView BgImage;
LottieAnimationView lottieAnimationView;
private static final int Num_Pages = 3;
private ViewPager viewPager;
private ScreenSlidePagerAdapter pagerAdapter;
Animation anim;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
**if (isIntroductoryOpened()){
Intent intent = new Intent(getApplicationContext(), MainActivity.class);
startActivity(intent);
}**
setContentView(R.layout.activity_introductiory);
BgImage = findViewById(R.id.bgImage);
lottieAnimationView = findViewById(R.id.lottie);
BgImage.animate().translationY(-4000).setDuration(1000).setStartDelay(4000);
lottieAnimationView.animate().translationY(1400).setDuration(1000).setStartDelay(4000);
viewPager = findViewById(R.id.pager);
pagerAdapter = new ScreenSlidePagerAdapter(getSupportFragmentManager());
viewPager.setAdapter(pagerAdapter);
anim = AnimationUtils.loadAnimation(this,R.anim.customanim);
viewPager.startAnimation(anim);
}
**private boolean isIntroductoryOpened() {
SharedPreferences pref = getApplicationContext().getSharedPreferences("myPref",MODE_PRIVATE);
Boolean isIntroOpened = pref.getBoolean("isOpened",false);
return isIntroOpened;
}**
private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter{
public ScreenSlidePagerAdapter(@NonNull FragmentManager fm) {
super(fm);
}
@NonNull
@Override
public Fragment getItem(int position) {
switch (position){
case 0:
onBoardinFragment1 tab1 = new onBoardinFragment1();
return tab1;
case 1:
onBoardinFragment2 tab2 = new onBoardinFragment2();
return tab2;
case 2:
onBoardinFragment3 tab3 = new onBoardinFragment3();
return tab3;
}
return null;
}
@Override
public int getCount() {
return Num_Pages;
}
}
}
解决方案
在 OnBoarding 活动之前的活动中,将代码更改为:
SharedPreferences onBoarding = getSharedPreferences("onBoardingScreen",MODE_PRIVATE);
boolean isFirstTime = onBoarding.getBoolean("firstTime",true);
if(isFirstTime){
SharedPreferences.Editor editor = onBoarding.edit();
editor.putBoolean("firstTime",false);
editor.commit();
Intent intent = new Intent(PrevActivity.this,OnBoarding.class);
startActivity(intent);
}
else{
Intent intent = new Intent(PrevActivity.this,NextActivity.class);
startActivity(intent);
}
PrevActivity 是 OnBoarding 之前的活动,NextActivity 是 OnBoarding 活动之后的活动。在第二行中,true 值是 的默认值firstTime
,一旦进入if
块,该值将设置为false
并且 OnBoarding 活动将不会再次向用户显示。
此代码将代替您为从 PrevActivity 转到 OnBoarding 活动而编写的代码。
推荐阅读
- react-native - 在 createbottomtabsnavigator 中调用函数
- multithreading - Entity Framework Core:不同的线程使用相同的 DbContext 实例
- c# - 如何在 c# 4.0 中将引用类型设为可为空
- tensorflow - 为什么我的 TensorBoard 训练图不完整(使用 Jupyter/TensorFlow/Keras)?
- windows - Winrm 无法使用 dnscmd - Windows server 2012 R2 Standard server
- regex - 使用 sed 替换的正则表达式
- php - 在 Codeigniter4 中找不到类“App\Model\Users”
- javascript - 当弹出窗口关闭时,如何删除扩展弹出窗口(React 组件)的侦听器?
- sql - T-SQL 获取合同的取消日期
- python - 复制没有不同属性的字典的Pythonic方式