#java #android #android-studio-3.0
#java #Android #android-studio-3.0
Вопрос:
Это код фрагмента загрузки 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;
}
}
Это код вводной операции. Значение
isIntroductoryOpened doe не становится ложным после нажатия плавающей
кнопки во фрагменте 3 загрузки.
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;
}
}
}
Ответ №1:
В действии перед активностью по загрузке измените код следующим образом:
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 — это действие перед загрузкой, а NextActivity — это действие после загрузки activity.
Во второй строке истинное значение является значением по умолчанию для firstTime
, после попадания в if
блок, значение будет установлено false
равным, и активность загрузки больше не будет отображаться пользователю.
Этот код придет вместо кода, который вы написали для перехода от предварительной активности к активности загрузки.
Комментарии:
1. В вашем коде заставка не отображается должным образом во второй раз. когда я запускаю код в первый раз, приложение не запускается, а во второй раз оно перенаправляет меня к основному действию, но не показывает заставку или экран, на котором я анимирую логотип. Я заменяю предыдущее действие на IntrosuctoryActivity.this и следующее действие с mainactivity.class .
2. я прикрепляю ссылку на git обновленного кода github.com/sam2001x/code.git