如何处理Backpress ViewPager片段



注册屏幕登录屏幕I实现的auth屏幕包含片段(登录范围,Insigupframgent(,使用ViewPager,注册fragment包含三个片段用于注册步骤当用户处于第一个注册片段时,我也想处理每个注册片段上的后按下,然后按向后开关登录frag

我的auth Activity

@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;
        }
    }
}

}

尝试以下:

@Override
public void onBackPressed() {
    if (viewPager.getCurrentItem() != 0) {
        viewPager.setCurrentItem(viewPager.getCurrentItem() - 1,false);
    }else{
         finish();
    }
}

,但请勿调用super.onBackPressed()方法。

只是不要将登录片段添加到背包中。如果您有问题。

如果您在单击ViewPagers不同的选项卡时遇到问题,然后按一下,然后跳到所有以前的打开片段 - 您可以做到这一点:

@Override
public void onBackPressed() {
    int currentItem = viewPager.getCurrentItem();
    if (currentItem != 0) {
        viewPager.setCurrentItem(currentItem - 1, true);
    } else {
        super.onBackPressed();
    }
}

最新更新