【发布时间】:2026-01-19 09:55:01
【问题描述】:
我知道这个问题在这里经常被问到,但没有一个答案对我有帮助。
我正在编写一个带有拇指重生功能的图库应用。为了显示进度,我添加了进度条,它应该计算创建的缩略图的数量。每次完成缩略图生成后,我都会发送一个 Redux 事件并在我的 Fragment 中监听它,以更改进度条。
为所有可见的照片/视频生成所有缩略图
private fun onMenuRefreshThumbs(activity: Activity) {
val mediaPath = Redux.store.currentState.mediaPath
val fileRepository = FileRepository(context = activity, mediaPath = mediaPath)
activity.runOnUiThread {
fileRepository.regenerateThumbs(activity)
}
}
上面用到的FileRepository里面的函数:
fun regenerateThumbs(context: Context) {
val success = File(getAbsoluteThumbsDir(context, mediaPath)).deleteRecursively()
getMediaItems()
}
fun getMediaItems(): MediaItemList {
val success = File(thumbPath).mkdirs()
val isThumbsEmpty = File(thumbPath).listFiles().isEmpty()
val mediaFileList = File(mediaPath).listFiles().
.sortedByDescending { it.lastModified() }
val list = MediaItemList()
mediaFileList.apply {
forEach {
list.add(MediaItem(it.name, 0, 0))
if (isThumbsEmpty) {
getOrCreateThumb(it)
Redux.store.dispatch(FileUpdateAction(it))
}
}
}
return list
}
在 Fragment 中订阅 Redux:
private fun subscribeRedux() {
val handler = Handler(Looper.getMainLooper())
val activity = requireActivity()
subscriber = { state: AppState ->
when (state.action) {
...
is ClearSelection -> {
progressCounter = 0
// fragment_gallery_progress.visibility = View.GONE
}
is FileUpdateAction -> {
Handler().post {
progressCounter++
fragment_gallery_progress.visibility = View.VISIBLE
fragment_gallery_progress.progress = progressCounter
// fragment_gallery_progress.invalidate()
log.d("test: Thumb Index $progressCounter ${state.action.mediaItem.name} was created")
}
Unit
}
}
}.apply {
Redux.store.subscribe(this)
}
}
我尝试了在这两种情况下调用线程的所有不同版本。但无论是使用处理程序还是通过activity.runOnUiThread 完成,进度条都不会改变,直到所有拇指都完成并且进度条从0跳到最大数字。我可以看到在正确的时间写入的日志,但进度条没有变化。
【问题讨论】:
标签: android kotlin redux android-progressbar