Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

PageRefreshLayout在refreshing后,失效无法回调和动画无法回弹问题 #439

Closed
ChawLoo opened this issue Apr 29, 2024 · 17 comments
Labels
Bug Something isn't working

Comments

@ChawLoo
Copy link
Contributor

ChawLoo commented Apr 29, 2024

问题描述

下拉刷新组件失效

期望结果

正常刷新

如何复现

希望快速解决请Fork仓库复现问题并附上链接, 否则只能等有空才能排查
凭空猜测只会让问题晦涩难懂, 浪费本项目可持续维护时间

Fork:https://github.com/ChawLoo/BRV
已复现,启动即TestAct

截图

下拉组件失效了,整个APP并未卡住,下拉回调已经没了,动画效果也不回弹了
image

版本

  • BRV:1.5.8
  • Android:11
  • Gradle: 8.4.2
  • Android Studio: Android Studio Iguana | 2023.2.1 Patch 2
@ChawLoo
Copy link
Contributor Author

ChawLoo commented Apr 30, 2024

跟这个问题的根源一致 #353
也是自定义View的attachToWindow的时序问题
因为没有attachToWindow,这个判断逻辑进不去,就无法更改状态为:RefreshFinish,导致后续状态判断出现问题
image
根源是这个,然后后续一系列的状态切换问题我就不截图了,打断点能看出来

@zkzk7749
Copy link

zkzk7749 commented May 3, 2024

我也遇见类似问题,只是我不会排查、定位故障

@ChawLoo
Copy link
Contributor Author

ChawLoo commented May 6, 2024

定位到了,正在研究如何修复

@ChawLoo
Copy link
Contributor Author

ChawLoo commented May 6, 2024

有个解决方案:

post {
    if (hasMore) finishRefresh(success) else finishRefreshWithNoMoreData()
}

image

@liangjingkanji
Copy link
Owner

#440 这个方案不行吗?

@ChawLoo
Copy link
Contributor Author

ChawLoo commented May 6, 2024

#440 这个方案不行吗?

不行,我已经关闭了,那个方案就无法autorefresh了,还是在SM的状态管理上的问题

@ChawLoo
Copy link
Contributor Author

ChawLoo commented May 6, 2024

有个解决方案:

post {
    if (hasMore) finishRefresh(success) else finishRefreshWithNoMoreData()
}

image

如果是这个方案,考虑的地方就很多,感觉还是需要在sm的状态上做文章

@liangjingkanji
Copy link
Owner

liangjingkanji commented May 6, 2024

你使用refreshing的生命周期是什么?

建议在ViewCreated中使用

@ChawLoo
Copy link
Contributor Author

ChawLoo commented May 6, 2024

你使用refreshing的生命周期是什么?

建议在ViewCreated中使用

如果是Act呢?

@liangjingkanji
Copy link
Owner

Act也有类似View创建好的生命周期吧

@ChawLoo
Copy link
Contributor Author

ChawLoo commented May 6, 2024

自定义View的attachToWindow生命周期是这样的,
Act.onCreate -> Act.onResume -> Act.onAttachedToWindow -> View.onAttachedToWindow
所以我说加一个post能解决,但是如果加了post的话,考虑的地方就很多

@ChawLoo
Copy link
Contributor Author

ChawLoo commented May 6, 2024

@liangjingkanji 最新的PR #442 我测了一下可以修复,你那边要么从其他角度看看?我自己尝试了我能想到的finish均无问题

@ChawLoo
Copy link
Contributor Author

ChawLoo commented May 22, 2024

不行,如果加延迟异步执行,解决问题,但是存在一个细节,如果进入页面快速去进行下拉操作是无法下拉的

@RokingYang
Copy link

调用refresh后再16ms内调用finish必现。

@ChawLoo
Copy link
Contributor Author

ChawLoo commented Jun 26, 2024

调用refresh后再16ms内调用finish必现。

他就是因为异步的原因,导致状态不一致,因为SM没有refreshing的方法,所以没问题,看大佬最近忙,自己临时方案解决一下吧,等他后续看看能不能修复

@liangjingkanji liangjingkanji added the Bug Something isn't working label Jul 15, 2024
@liangjingkanji
Copy link
Owner

仔细看了下问题, 这就是由于页面未创建完成导致SmartRefreshLayout没有在刷新完成后重置状态为RefreshState.None

@liangjingkanji
Copy link
Owner

liangjingkanji commented Jul 16, 2024

已修复试试新版本吧
@ChawLoo

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Bug Something isn't working
Projects
None yet
Development

No branches or pull requests

4 participants