Android ListView не обновляется после изменения курсора

следующий код используется для заполнения бесконечного ListView. Когда пользователь достигает конца списка, приложение вызывает асинхронную задачу, чтобы получить больше элементов, а затем при пост-выполнении возвращается новый курсор и объединяется с предыдущим. Проблема в том, что этот код не работает на ICS и Jelly Bean, но работает на Froyo и Gingerbread. В ICS и JellyBean список становится пустым, но если вы регистрируете размер курсора, вы получаете размер объединенного курсора.

Cursor[] cursors = new Cursor[2];   
//actual cursor   
cursors[0] = resourceCursor.getCursor();   
//new cursor returned by async task   
cursors[1] = result;   
MergeCursor mergeCursor = new MergeCursor(cursors);   
resourceCursor.changeCursor(mergeCursor);  

person rodrigocoelho    schedule 19.12.2012    source источник
comment
Привет @soynerdito, спасибо за ответ, я пытался после изменения курсора, но безуспешно...   -  person rodrigocoelho    schedule 19.12.2012
comment
Другой разработчик с такой же проблемой: buradabuldum.blogspot.pt/2012. /01/   -  person rodrigocoelho    schedule 19.12.2012


Ответы (1)


Хорошо, я нашел решение, кажется некрасивым решением, но оно работает. В моем исследовании все проблемы, похоже, были связаны с проблемой после Honeycumb, поэтому я изменил уровень API на 11, чтобы получить доступ к swapCursor, а затем в моем коде:

Cursor[] cursors = new Cursor[2];   
//actual cursor   
cursors[0] = resourceAdapterCursor.getCursor();   
//new cursor returned by async task   
cursors[1] = result;   
MergeCursor mergeCursor = new MergeCursor(cursors);   
if (android.os.Build.VERSION.SDK_INT > android.os.Build.VERSION_CODES.GINGERBREAD){
    resourceAdapterCursor.swapCursor(mergeCursor);
} else {
    resourceAdapterCursor.changeCursor(mergeCursor);
}

Спасибо!
С уважением.
Родриго

person rodrigocoelho    schedule 19.12.2012
comment
Но не забывайте, что swapCursor не закрывает старый курсор. - person Vlad Yarovyi; 21.08.2014