Проблема с настройкой видимости в Listview & BaseAdapter - PullRequest
2 голосов
/ 19 марта 2010

Я работаю над автопросмотром списка. Каждый раз, прежде чем я позвоню

    mAdapter.notifyDataSetChanged();

я переключаю последний элемент в списке с кружком прогресса.

    /**
    * displays a progress banner instead of the last item.
    * @param reload boolean
    */
    protected void showReloadView(boolean reload){
         View item = mListView.getChildAt(onLastItem);
         //View item = mListView.getAdapter().getView(onLastItem, null, null);
         content = item.findViewById(id.itemContent);
         loading = item.findViewById(id.itemLoading);
         if(reload){
           content.setVisibility(View.GONE);
           loading.setVisibility(View.VISIBLE);
        }else{
           content.setVisibility(View.VISIBLE);
           loading.setVisibility(View.GONE);
   }

Моя проблема здесь в том, что я перерабатываю свои взгляды, упомянутые в SDK, как EfficientAdapter. Поэтому мой объект ListView в настоящее время содержит не более 8 элементов (потому что больше нет видимых)

Первый запуск в порядке, потому что onLastItem равен 7 (видимых элементов - 1), но второй запуск

    ListView.getChildCount() 

возвращает только 6 предметов. Так почему же мой ListView становится меньше? Из-за Visibility.GONE? Я что-то делаю неправильно?

Я также пытался использовать незакомментированную строку. Мой адаптер знает реальный размер списка, и я даже могу получить представление. Но настройка видимости этих представлений не имеет никакого эффекта.

Спасибо заранее

Ответы [ 2 ]

0 голосов
/ 20 марта 2010

После просмотра видео google IO 09 я решил проблему.

Поскольку Listview содержит не более, чем видимые представления, я просто изменил свой код на:

View item = mListView.getChildAt(mListView.getChildCount()-1);

Сохранение видов в поле и после обновления набора данных я могу переключиться обратно на макеты. Проверено и работает отлично.

Спасибо, что уделили время.

0 голосов
/ 19 марта 2010

Так почему мой ListView становится меньше? Из-за Visibility.GONE?

Это было бы мое предположение, но вам нужно взглянуть на реализацию ListView, чтобы знать наверняка.

FWIW, я выбрал обратный подход с моим EndlessAdapter - я оставляю ListView в покое и использую декоративный адаптер, который обрабатывает получение дополнительных данных.

...