公式ドキュメントによると、これを行う良い方法はありません。
http://developer.android.com/reference/android/app/DownloadManager.html
サービスを開始するか、数秒ごとにダウンロードのステータスを照会する何らかのバックグラウンド スレッドを開始することをお勧めします。(setFilterById には long[] がかかるため、ID を long[] で追跡します)
long[] ids = new long[MyDownloadQueue.length];
// Look at all these requests I'm building!
ids[i++] = dm.enqueue(request);
Cursor cursor = dm.query(new DownloadManager.Query().setFilterById(ids));
while (cursor.moveToNext()) {
int columnIndex = cursor.getColumnIndex(DownloadManager.COLUMN_STATUS);
int status = cursor.getInt(columnIndex);
int columnReason = cursor.getColumnIndex(DownloadManager.COLUMN_REASON);
int reason = cursor.getInt(columnReason);
// your stuff here, recording the status and reason to some in memory map
}
この方法では、リストビューは何の作業も行う必要がなく、UI はスムーズに保たれます。私が知っているより良い方法は実際にはありません。申し訳ありませんが、クエリを含まない回答を提供できませんでした。