在做一个登录注册页面时,遇到的一个问题:
预计做出如下效果:
点击“还没有账号”切换到注册页面
但是在一开始写代码的时候,只想着使用两个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();
}
});
即可完成预计效果