Пользовательский нижний колонтитул touchlistview предотвращает обновление размера списка

Моя проблема может быть связана с этим:

Добавить нижний колонтитул в Android TouchListView

В демонстрационном проекте TouchlistView Commonware https://github.com/commonsguy/cwac-touchlist/blob/master/demo/src/com/commonsware/cwac/tlv/demo/TouchListViewDemo.java

В качестве нижнего колонтитула добавляется простое текстовое представление, которое работает нормально. Когда я вместо этого добавляю свой собственный, он ломается при удалении элементов. Изначально с 4 элементами нижний колонтитул остается на позиции 5 после удаления любого из 4 элементов.

Вот как я добавляю нижний колонтитул:

View footerView = ((LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.footer_cloud, null, false);

Это xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="64dip"
    android:gravity="center_vertical"
    >
    <ImageView android:id="@+id/add_icon"
        android:layout_centerInParent="true"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
                android:src="@drawable/ic_menu_add"
    />

    <ImageView android:id="@+id/cloudBG"
        android:layout_centerInParent="true"
        android:layout_width="230dp"
        android:layout_height="60dp"
        android:background="@drawable/cl"

    />


</RelativeLayout>

Добавление отладки в onRemove:

Log.d("tlv","count b4 remove "+adapter.getCount()+" aray: "+array.size());
            adapter.remove(adapter.getItem(which));

            //adapter.notifyDataSetChanged();
            Log.d("tlv","count after remove "+adapter.getCount()+" aray: "+array.size());

Показывает, что размеры адаптера и массива обновлены

Я изменил некоторый код в touchlistview.java, чтобы исправить сбой при перетаскивании элемента ниже самого нижнего элемента:

Log.d("tlv","перетащите из "+mFirstDragPos+" в "+mDragPos+" cnt "+ getCount());

                                                if(mDragPos < getCount()-this.getFooterViewsCount()){// Nino van Hooff: fix out of bounds
                                                    mDropListener.drop(mFirstDragPos, mDragPos);
                                                }else{
                                                    mDropListener.drop(mFirstDragPos, mDragPos-1);
                                                }
                                        }
                                        unExpandViews(false);

Функция getCount всегда возвращает одно и то же число (количество элементов + 1 для нижнего колонтитула), даже после удаления элементов.

Кто знает, в чем разница с моим пользовательским нижним колонтитулом?


person Nino van Hooff    schedule 07.09.2011    source источник
comment
Можете ли вы опубликовать ссылку на полный образец приложения, демонстрирующий проблемы? Возможно, вы столкнулись с некоторыми ограничениями в TouchListView, которые я могу исправить.   -  person CommonsWare    schedule 07.09.2011
comment
Спасибо за быстрый ответ! ссылка на полный проект eclipse   -  person Nino van Hooff    schedule 08.09.2011
comment
Ваш проект очень странный. Это как если бы вы поместили свой код в проект библиотеки TouchListView, что, безусловно, не является ожидаемым способом настройки чего-либо. Я не могу заставить его построить ни в Eclipse, ни через командную строку. Я проведу некоторые эксперименты по этому вопросу самостоятельно, насколько смогу.   -  person CommonsWare    schedule 08.09.2011


Ответы (1)


Пока я не могу воспроизвести ваши проблемы, есть и другие. :-)

Даже в базовом коде, если вы удалите строку из TouchListView, к которой вы применили нижний колонтитул, вы получите странные визуальные результаты. С точки зрения иерархического представления происходит следующее: для каждой удаленной строки нижний колонтитул дублируется — удалите четыре строки, получите четыре нижних колонтитула.

Я понятия не имею, почему это происходит. TouchListView не обращает внимания на ListAdapter, который предоставляет его содержимое. Возможно, это и есть настоящая проблема.

В настоящее время мне придется официально отказаться от поддержки нижнего колонтитула и одновременной поддержки режимов удаления. Либо работает по отдельности, но не в комбинации. Я дополню TouchListView, чтобы создать исключение во время выполнения, если вы попытаетесь.

В конце концов, TouchListView действительно нужна замена. Возможно, я заменю его в 2012 году в рамках моего более глубокого изучения сенсорных событий. Возможно, кто-то еще придумает свое. Поскольку большая часть этого кода просто взята из приложения «Музыка» AOSP, у меня ограниченные возможности по ремонту.

Приносим извинения за то, что не поддерживаем эту функцию в настоящее время.

person CommonsWare    schedule 08.09.2011
comment
Извините, еще раз отредактируйте ограничения: я чувствую, что это все еще можно исправить, запустив какой-то механизм обновления. Попробуйте это (ваш или мой нижний колонтитул, не имеет значения): - запустить приложение - удалить все строки, проводя пальцем --› нижний колонтитул находится в исходном положении - приостановить приложение, нажав кнопку «Назад», вернуться на главный экран - возобновить приложение, выбрав его из списка приложений --> нижний колонтитул находится в ожидаемой позиции ~ Итак, где-то при возобновлении приостановки часть объекта отбрасывается и пересчитывается... но что, и можем ли мы применить это? - person Nino van Hooff; 08.09.2011
comment
@Nino van Hooff: я чувствую, что это все еще можно исправить, запустив какой-то механизм обновления. -- возможно. Вы можете поэкспериментировать и внести свой патч. Опять же, когда-нибудь я смогу решить эту проблему, но тот факт, что я работаю с в основном чужой кодовой базой, действительно мешает мне понять, что происходит. Код, который я вытащил из AOSP, полностью исписан хаком, поэтому я просто сосредоточился на попытке предоставить стабильный компонент, не обязательно со всеми возможными функциями. Еще раз, мои извинения. - person CommonsWare; 08.09.2011
comment
Я сделаю некоторые уступки. Спасибо за ваше время. - person Nino van Hooff; 09.09.2011