Ich habe einen Handler in einer Aktivität registriert. handleMessage() ruft notifyDataSetChanged auf einem Adapter auf. Die Dinge funktionieren, während die Aktivität den Fokus hat. Wenn ich jedoch aus der Aktivität heraus und wieder zurück navigiere, funktioniert notifyDataSetChanged() nicht.Handler-Aufruf an notifyDataSetChanged() nicht ausgeführt
FileAdapter ist ein ArrayAdapter. MergeAdapter ist eine benutzerdefinierte Klasse von CommonsWare. _mergeAdapter enthält _fileAdapter.
Aktivitätscode:
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();
}
};
}
Vorbei an den Handler:
RunnableTask task = new DownloadFileRunnableImpl(application, the_workspace_url, the_file_info, the_workspace_info.getTitle(), the_internal_storage_directory,
_downloadHandler);
Hintergrund Thread-Code:
if(temp > previous) {
Message message = new Message();
message.arg1 = _currentProgress.intValue();
message.obj = _fileId;
_progressHandler.sendMessage(message);
previous = temp;
}
Die andere Information ist, dass ich das Bestehen der Handler durch eine Mappe und dann in das Lauffähige. Ich mache das, um den Hintergrund-Thread in einem Dienst auszuführen. Ich denke nicht, dass das das Problem ist.
EDIT: Es scheint, wie der Hundeführer nicht mit der Aktivität zum zweiten Mal wird es navigiert (vielleicht, weil onCreate schafft einen neuen Handler) zugeordnet ist. Gibt es eine Möglichkeit, den alten Handler neu zu assoziieren oder zu behalten?
Aktualisieren Die Aktivität wird zerstört, wenn sie den Fokus auf eine andere Aktivität verliert.
Ok. Wenn der Handler zerstört wird, verliert er nicht seine Verbindung mit dem Hintergrund-Thread und aktualisiert die neue Aktivität nicht? – benkdev
das ist, was ich denke passiert ist. Es kann auch etwas anderes sein, deshalb sollten Sie nach der Log-Nachricht suchen. Oder Sie können es im Debug-Modus ausführen und eine Pause in der Aktivität onDestroy setzen und sehen, ob es aufgerufen wird. – flobacca
Ich habe das überprüft und die Aktivität wird nicht zerstört, wenn ich mich von ihr entferne. Wenn ich zurück navigiere, erstellt es einen neuen Handler in onCreate(). – benkdev