TabLayout设置分割线 RecyclerView报错IllegalStateException

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();
} 
发布了63 篇原创文章 · 获赞 10 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/yin13753884368/article/details/78455610
今日推荐