Прокрутка списка вверх зависает

У меня есть список с пользовательским курсорным адаптером. Он содержит несколько сотен элементов. Прокрутка вниз выполняется плавно и быстро, но прокрутка назад-вверх все время зависает. Я не загружаю изображение или какую-либо операцию в потоке пользовательского интерфейса. Получите только несколько значений от курсора и установите его в текстовые представления

private class EpisodesAdapter extends CursorAdapter {
        LayoutInflater inflater;
        public EpisodesAdapter(Context context) {
            super(context, null, false);
            inflater = (LayoutInflater)     context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        }

        @Override
        public View newView(Context context, Cursor cursor, ViewGroup parent) {

            View view = inflater.inflate(R.layout.list_item_episode, parent,  false);

            view.setBackgroundResource(R.drawable.abs__list_selector_holo_light);
            return view;
        }

        @Override
        public void bindView(View view, final Context context, final Cursor cursor) {
            final String title = cursor.getString(EpisodesQuery.EPISODE_TITLE);
            final String episodeId = cursor.getString(EpisodesQuery.EPISODE_ID);
            final String time = cursor.getString(EpisodesQuery.EPISODE_PUBLISHED_AT);
            final String episodeUrl = cursor.getString(EpisodesQuery.EPISODE_URL);
            final int stateId = cursor.getInt(EpisodesQuery.EPISODE_STATE_ID);

                        ((TextView) view.findViewById(R.id.title)).setText(title);
                        ...... 
                }
}

Некоторые мысли, что может быть причиной этой проблемы?


person Martin Vandzura    schedule 29.10.2012    source источник
comment
Если приложение полностью зависает, может появиться сообщение logcat, объясняющее проблему. Вы там что-нибудь видите?   -  person Bryan Herbst    schedule 29.10.2012
comment
Пробовали ли вы общие улучшения производительности, такие как держатели представлений или асинхронные загрузчики задач?   -  person jsmith    schedule 29.10.2012
comment
Я думаю, вам нужно закрыть курсор после его использования. Проверьте logcat, он может показать некоторую информацию о том, почему он зависает.   -  person G_S    schedule 29.10.2012
comment
1. Единственное сообщение в logcat - это окно курсора: окно заполнено, но я вижу его и при прокрутке вниз, и оно работает плавно 2. Да, я пробовал. Я загружаю только данные из курсора. Viewholder не используется в cursoradapter, потому что у него есть собственная реализация getview, которая его обрабатывает. Newview вызывается всего несколько раз, а bindview вызывается для каждой строки. 3. Куда закрыть курсор? Адаптер курсора справляется с этим, и я не могу закрыть его в bindview. Я не знаю, в чем может быть проблема, потому что прокрутка всего списка вниз - это хорошо, но как только я дохожу до конца и пытаюсь прокрутить вверх, он зависает. Это очень странно.   -  person Martin Vandzura    schedule 29.10.2012


Ответы (2)


Думаю, я понял. Один столбец в курсоре содержит некоторые данные большого двоичного объекта. Когда я удалил этот столбец из выбора запроса, он плавно прокручивался вверх. Спасибо за все ответы.

person Martin Vandzura    schedule 29.10.2012

ListView пуст, если SimpleCursorAdapter закрыт(). Эта ссылка может ответить на вопрос, где закрыть курсор. Если он плавно прокручивается вниз, я не вижу причин для зависания при прокрутке вверх. Меня интересует проблема, с которой вы столкнулись.

person Raghunandan    schedule 29.10.2012
comment
курсорадаптер не нуждается в просмотрщике. newview и bindview уже справляются с этим. Как я сказал. Прокрутка вниз плавная, только когда я пытаюсь прокрутить вверх, она начинает зависать. - person Martin Vandzura; 29.10.2012