开发中有功能需要使用CoordinatorLayout+AppBarLayout+TabLayout+ViewPager+RecyclerView ,但是发现有时刷新后没法正常滑动,只能在viewpager中才能上下滑动,在appbarlayout中无法滑动,查找资料后找到解决方法:
CoordinatorLayout.LayoutParams layoutParams = (CoordinatorLayout.LayoutParams) appBarLayout.getLayoutParams(); AppBarLayout.Behavior behavior = (AppBarLayout.Behavior) layoutParams.getBehavior(); behavior.setDragCallback(new AppBarLayout.Behavior.DragCallback() { @Override public boolean canDrag(@NonNull AppBarLayout appBarLayout) { return true; } });
但是发现在onCreate中调用后报空指针异常:
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.design.widget.AppBarLayout$Behavior.setDragCallback(android.support.design.widget.AppBarLayout$BaseBehavior$BaseDragCallback)' on a null object reference
之后发现在外面包一层runnable就ok了:
appBarLayout.post(new Runnable() { @Override public void run() { CoordinatorLayout.LayoutParams layoutParams = (CoordinatorLayout.LayoutParams) appBarLayout.getLayoutParams(); AppBarLayout.Behavior behavior = (AppBarLayout.Behavior) layoutParams.getBehavior(); behavior.setDragCallback(new AppBarLayout.Behavior.DragCallback() { @Override public boolean canDrag(@NonNull AppBarLayout appBarLayout) { return true; } }); } });
问题解决了,个人留作备注 ,如果有更好的方法,大家一起学习。