完美解决在同一Activity下的两个Fragment跳转出现布局重叠和事件泄露问题

在做一个登录注册页面时,遇到的一个问题:

预计做出如下效果:

点击“还没有账号”切换到注册页面

但是在一开始写代码的时候,只想着使用两个fragment之间跳转,然后出现了两个fragment布局重叠,和事件泄露的问题,并且上方的TabLayout也不会跟随切换:

于是乎突然想到应该从viewPager方面来解决问题,只要在点击“还没有账号”的时候,将此时viewPager的Item改为我想要切换的页面,就行了。

因为这俩个fragment我放在同一个Activity下,所以我们对该Activity进行操作:

    //1.定义一个内部接口,用于实现俩个fragment之间的跳转
    public interface FgToFg {
        public void gotoFg(ViewPager viewPager);
    }

    private FgToFg fgToFg;//2.定义跳转接口的成员变量

    //3.为跳转接口的成员变量设置setter方法。
    public void setGotoFg(FgToFg fgToFg) {
        this.fgToFg = fgToFg;
    }

    //4.最后再给该Activity设置一个调用此接口中定义此方法的方法
    public void skipToFg() {
        if (fgToFg != null) {
            fgToFg.gotoFg(viewPager);
        }
    }

最后在点击事件中写:

    tvNoAccount.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            //同一个LoginActivity下的LoginFragment跳转到RegisterFragment
            /*会出现fragment布局重叠,和事件泄露,并且TabLayout也不会跟随切换
            getActivity().getSupportFragmentManager()
                    .beginTransaction()
                    .replace(R.id.login_fragment_layout,new RegisterFragment(),null)
                    .addToBackStack(null)
                    .commit();
            */
            //通过设置ViewPager的setCurrentItem来切换页面
            ((LoginActivity) getActivity()).setGotoFg(new LoginActivity.FgToFg() {
                @Override
                public void gotoFg(ViewPager viewPager) {
                    viewPager.setCurrentItem(1);
                }
            });
            ((LoginActivity) getActivity()).skipToFg();
        }
    });

即可完成预计效果

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夏夜追凉丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值