Open goodluckier opened 3 years ago
我尝试了一下,没能重现这个问题
建议自己断点调试一下 TwoLevelHeader 中的代码,看看 mRefreshKernel 是不是 等于 null
/**
* 结束二级刷新
* @return TwoLevelHeader
*/
public TwoLevelHeader finishTwoLevel() {
final RefreshKernel refreshKernel = mRefreshKernel;
if (refreshKernel != null) {
refreshKernel.finishTwoLevel();
}
return this;
}
如果 mRefreshKernel != null 在单步进去看看状态是不是 RefreshState.TwoLevel
@Override
public RefreshKernel finishTwoLevel() {
if (mState == RefreshState.TwoLevel) {
mKernel.setState(RefreshState.TwoLevelFinish);
if (mSpinner == 0) {
moveSpinner(0, false);
notifyStateChanged(RefreshState.None);
} else {
animSpinner(0).setDuration(mFloorDuration);
}
}
return this;
}
我也出现了这样的问题,而且打了断点看了state是TwoLevelReleased,这个根源我没去深究,现在的做法是关闭二楼时手动用kernel将状态调为RefreshState.TwoLevel。
应该是因为RefreshState.TwoLevel这个状态是在动画结束后设置的,所以在动画未结束前调用finish,状态是Released,会出现无法关闭的情况。
` <com.scwang.smart.refresh.layout.SmartRefreshLayout android:id="@+id/swl_news_list" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@android:color/transparent" android:visibility="visible" app:srlDragRate="1">
关闭时调用two_level_header.finishTwoLevel();
我的二楼布局写在另一个页面中,通过库的下拉监听动画模仿二楼出现。
不知道为什么调用关闭了,却没走onStateChanged