Как работать с фрагментами viewPager backPress - PullRequest
0 голосов
/ 25 июня 2019

экран регистрации экран входа в систему Я реализовал экран аутентификации, содержащий фрагменты (loginFragment, SignUpFramgent), используя viewpager, SignUpFragment содержит три фрагмента для шагов регистрации, которые я хочу обработать при обратной печатикаждый из фрагментов регистрации также, когда пользователь находится в первом фрагменте регистрации и нажимает кнопку «назад» для входа в систему frag

моя активность Auth

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_authentication);
    setSupportActionBar(toolbar);

    //assign the views
    toolbar=findViewById(R.id.authToolBar);
    viewPager=findViewById(R.id.view_pager);
    tableLayout=findViewById(R.id.tabLayout);

    //add fragments to the adapter and attact them to viewPager
    TabAdapter tabAdapter=new TabAdapter(getSupportFragmentManager());
    tabAdapter.addFragment(new LoginFragment(),"Login");
    tabAdapter.addFragment(new SignUpFragment(),"Sign Up");
    viewPager.setAdapter(tabAdapter);
    tableLayout.setupWithViewPager(viewPager);

}

@Override
public void onBackPressed() {
    switch (viewPager.getCurrentItem()){
        case 0:
            finish();
            return;
        case 1:
            viewPager.setCurrentItem(0);
            return;
    }
    super.onBackPressed();
}

}

мой фрагмент подписи

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View view= inflater.inflate(R.layout.fragment_sign_up, container, false);
    //assign the views
     button=view.findViewById(R.id.btn_sign_up);
     stateProgressBar=view.findViewById(R.id.your_state_progress_bar_signUp);
     fragmentManager=getChildFragmentManager();
     fragmentHelper =new FragmentHelper();
     //default fragment is PersonalInfoFragment
     if (savedInstanceState==null){

         fragment=new PersonalInfoSignUpFragment();
         fragmentHelper.setFragment(fragment,R.id.sign_up_container,fragmentManager,"personal");
         stateProgressBar.setStateDescriptionData(descriptionData);
         stateProgressBar.setCurrentStateNumber(StateProgressBar.StateNumber.ONE);
    }
    button.setOnClickListener(this);


    return view;
}


@Override
public void onClick(View v) {
    progressNumber=stateProgressBar.getCurrentStateNumber();
    //on click next move to next step until the last redirect to the mainActivity
    if (v.getId()==R.id.btn_sign_up){
        switch (progressNumber){
            case 1:
                fragment=new ContactSignUpFragment();

                fragmentHelper.setFragment(fragment,R.id.sign_up_container,fragmentManager,"contacts");
                stateProgressBar.setCurrentStateNumber(StateProgressBar.StateNumber.TWO);

                return;
            case 2:
                fragment=new ShopSignUpFragment();
                fragmentHelper.setFragment(fragment,R.id.sign_up_container,fragmentManager,"shop");
                stateProgressBar.setCurrentStateNumber(StateProgressBar.StateNumber.THREE);

                return;

            case 3:
                Intent intent=new Intent(getActivity(),MainActivity.class);
                startActivity(intent);
                getActivity().finish();

                return;
        }
    }

}

}

Ответы [ 2 ]

0 голосов
/ 26 июня 2019

Только не добавляйте фрагмент Login в backstack.Если у вас есть проблемы в этом.

Если у вас возникли проблемы, когда вы нажимаете на разных вкладках видовых пейджеров, а затем нажимаете назад, и он переходит на все ваши предыдущие открытые фрагменты - вы можете сделать это:

@Override
public void onBackPressed() {
    int currentItem = viewPager.getCurrentItem();
    if (currentItem != 0) {
        viewPager.setCurrentItem(currentItem - 1, true);
    } else {
        super.onBackPressed();
    }
}
0 голосов
/ 25 июня 2019

попробуйте это:

@Override
public void onBackPressed() {

    if (viewPager.getCurrentItem() != 0) {
        viewPager.setCurrentItem(viewPager.getCurrentItem() - 1,false);
    }else{
         finish();
    }

}

но не вызывать super.onBackPressed() метод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...