TabLayout设置分割线 RecyclerView报错IllegalStateException

来源:互联网 发布:movist for mac 1.4.1 编辑:程序博客网 时间:2024/05/19 19:31

TabLayout设置分割线 & RecyclerView报错IllegalStateException

刚开始准备用自定义View,tabLayout.addTab(tabLayout.newTab().setCustomView(view),false);
然而分割线是有了,但是不居中

LinearLayout mLinearLayout = (LinearLayout) tabLayout.getChildAt(0);// 在所有子控件的中间显示分割线(还可能只显示顶部、尾部和不显示分割线)mLinearLayout.setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE);// 设置分割线的距离本身(LinearLayout)的内间距mLinearLayout.setDividerPadding(20);// 设置分割线的样式mLinearLayout.setDividerDrawable(ContextCompat.getDrawable(mActivity, R.drawable.divider_vertical));//给LinearLayout设置跟Tab一样的背景色就好了mLinearLayout.setBackgroundColor(getResources().getColor(R.color.tabback));


RecyclerView报错IllegalStateException: Cannot call this method while RecyclerView is computing a layout or scrolling

在使用recycleview的时候,在滑动时调用notifydatachange,
这时候就会报recycleview在计算layout或者滑动的时候不能调用notifydatachange的错误

解决方法:
在滑动或者计算layout的时候不刷新数据: 判断是否正在滑动的方法是getScrollState(),
如果它等于RecyclerView.SCROLL_STATE_IDLE说明不在滑动,判断有没有在计算layout的方法是isComputingLayout(),
取否就可以得到不在计算的时候,通过这两个条件来决定是否刷新数据

代码如下

if (ryLeft.getScrollState() == RecyclerView.SCROLL_STATE_IDLE && !ryLeft.isComputingLayout()) {    adapterLeft.notifyDataSetChanged();} 
原创粉丝点击