这里SlidingMenu用的是github 的开源项目jfeinstein10/SlidingMenu ,单侧的SldingMenu配合ViewPager在demo中有解决方案。
这里通过修改一点源码解决问题。
首先找到CustomAboveView.java里的determineDrag方法,
在某个if条件里添加一个方法determineDragValid,如图
方法相关内容如下:
private boolean isLeftEnable=true;
private boolean isRightEnable=true;
public void setLeftEnable(boolean isLeftEnable) {
this.isLeftEnable = isLeftEnable;
}
public void setRightEnable(boolean isRightEnable) {
this.isRightEnable = isRightEnable;
}
private boolean determineDragValid(float dx)
{
return 1!=mCurItem||((dx >=0&&isLeftEnable)||(dx<=0&&isRightEnable));
}
除了determineDragVaild ,还添加了两个set方法,这两个方法分别用来控制 启用/禁用 左/右 侧抽屉。
然后在找到SlidingMenu.java ,添加两个转发方法
public void setLeftEnable(boolean b) {
mViewAbove.setLeftEnable(b);
}
public void setRightEnable(boolean b) {
mViewAbove.setRightEnable(b);
}
然后就可以用上面添加的方法解决冲突问题了
在ViewPager的OnPageChangeListener里面onPageSelect方法里面判断,注意在此之前要setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN)
@Override
public void onPageSelected(int position) {
if (0==position)
{
slidingMenu.setLeftEnable(true);
slidingMenu.setRightEnable(false);
}else if (lastPosition==position)
{
slidingMenu.setLeftEnable(false);
slidingMenu.setRightEnable(true);
}else{
slidingMenu.setLeftEnable(false);
slidingMenu.setRightEnable(false);
}
}
如果是仿网易新闻布局,那么在点击抽屉菜单里的某项切换到不同栏目时,依旧会发生SlidingMenu冲突问题,这个解决方案是在每次切换Fragment时,重新设置SldingMenu 左右侧菜单状态。
如果还有其他更好的解决方法,欢迎指教。