gpt4 book ai didi

android - 处理程序调用 notifyDataSetChanged() 未执行

转载 作者:行者123 更新时间:2023-11-29 02:05:52 24 4
gpt4 key购买 nike

我在 Activity 中注册了一个处理程序。 handleMessage() 在适配器上调用 notifyDataSetChanged。当 Activity 具有初始焦点时,事情就会起作用。但是,当我离开 Activity 并返回时,notifyDataSetChanged() 不起作用。

FileAdapter 是一个 ArrayAdapter。 MergeAdapter 是 CommonsWare 的自定义类。 _mergeAdapter 包含 _fileAdapter。

Activity 代码:

 public void setUpDownloadHandler() {
// Define the Handler that receives messages from the thread and update the progress
_downloadHandler = new Handler() {
public void handleMessage(Message message) {
super.handleMessage(message);
String fileId = (String) message.obj;
int progress = message.arg1;
FileInfo tempFile = null;
for (FileInfo file: _files) {
if (file.getFileId().equals(fileId)) {
file.setDownloadProgress(progress);
tempFile = file;
}
}
if (tempFile != null) {
_files.remove(tempFile);
_files.add(tempFile);
}
_fileAdapter.notifyDataSetChanged();
_mergeAdapter.notifyDataSetChanged();
}
};
}

传递处理程序:

RunnableTask task = new DownloadFileRunnableImpl(application, the_workspace_url, the_file_info, the_workspace_info.getTitle(), the_internal_storage_directory,
_downloadHandler);

后台线程代码:

if(temp > previous) {
Message message = new Message();
message.arg1 = _currentProgress.intValue();
message.obj = _fileId;
_progressHandler.sendMessage(message);
previous = temp;
}

另一条信息是,我将处理程序传递给 Binder,然后传递给可运行对象。我这样做是为了在服务中运行后台线程。我不认为这是问题所在。

编辑:处理程序在第二次导航到该 Activity 时似乎没有与该 Activity 相关联(可能是因为 onCreate 创建了一个新的处理程序)。有没有办法重新关联或保留旧的处理程序?

更新当 Activity 失去对另一个 Activity 的关注时,该 Activity 将被销毁。

最佳答案

我会尝试在您的 Activity 的 onDestroy 方法中放置一条日志消息,以查看它是否在您离开 Activity 时被销毁。所以你的任务可能有来自旧 Activity 的处理程序。

关于android - 处理程序调用 notifyDataSetChanged() 未执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10093303/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com