【问题标题】:How to handle backPress viewpager fragments如何处理 backPress viewpager 片段
【发布时间】:2019-06-25 20:25:40
【问题描述】:

signup screenlogin screen我使用 viewpager 实现了包含片段(loginFragment,SignUpFramgent)的认证屏幕, SignUpFragment 包含三个用于注册步骤的片段 当用户在第一个注册片段中时,我也想处理每个注册片段的后按,然后按返回开关登录片段

我的身份验证活动

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

}

}

【问题讨论】:

    标签: android android-fragments android-viewpager android-fragmentactivity android-tablayout


    【解决方案1】:

    试试这个:

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

    但不要调用super.onBackPressed()方法。

    【讨论】:

    • 先生,当我从注册步骤上的任何片段按回时,仍然没有修复 U​​X 将我重定向回登录,当我再次按注册时,它会转到我所在的最后一个片段
    • 如果您有更好的实现方式,我添加了登录和注册屏幕的屏幕截图
    【解决方案2】:

    只是不要将登录片段添加到后台堆栈。如果你有问题。

    如果您在点击查看页面的不同选项卡时遇到问题,然后按返回,它将跳转到您之前打开的所有片段 - 您可以这样做:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多