Удаление страницы из FragmentStatePagerAdapter вызывает проблемы

Наше приложение имеет несколько фрагментов для отображения данных, относящихся к местоположению. Мы использовали FragmentStatePagerAdapter и ViewPager. Пользователь должен иметь возможность добавлять новую страницу и удалять ее. Добавление новой страницы работает нормально, удаление существующей страницы вызывает проблемы. Когда я проверил, у меня было 3 страницы. Я удалил 2-й из левой кнопки меню навигации. Когда я пытаюсь перейти на 3-ю страницу, он показывает вид удаленной страницы, которая является 2-й страницей. И он не показывает 3-ю страницу.

У меня есть Overriden getItem(), где я возвращаю новую страницу. Я скорректировал ItemCount, когда добавлял/удалял новую страницу в адаптер. И я вызвал startUpdate() перед добавлением/удалением, destroy() для удаления любого объекта фрагмента в позиции, finishUpdate() после всего, что сделано. И, наконец, уведомить DataSetChanged().

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


person cgr    schedule 09.07.2015    source источник
comment
Я помню, что у FragmentStatePagerAdapter возникали проблемы всякий раз, когда я пытался изменить данные, стоящие за ним (в моем случае, меняя порядок элементов). Я думаю, что закончил тем, что написал свой собственный адаптер пейджера, который позаимствовал у FragmentStatePagerAdapter, но значительно изменил поведение при обработке изменений набора данных. К сожалению, у меня нет под рукой кода...   -  person Karakuri    schedule 10.07.2015


Ответы (1)


Я мог решить это. Хотя ответ Wize здесь Заменить фрагмент внутри ViewPager не решает мою проблему, я можно найти в этом подсказку. Мне пришлось переопределить getItemPosition (объект объекта), который сообщает системе, что конкретный «объект» не изменен / больше не существует.

У меня также есть список фрагментов (ссылок) локально, который я изменяю в соответствии со списком, поддерживаемым FragmentStateAdapter, и вот мой код для getItemPosition():

@Override  
    public int getItemPosition(Object object) {  
       if (object instanceof myFragment) {  
        if (!mFragments.contains(object)) {  
                return POSITION_NONE;  
            } else {
                return mFragments.indexOf(object);  
            }  
        }  
        return super.getItemPosition(object);  
    }

Кроме того, я вызывал notifyDataSetChanged() только после добавления/удаления фрагментов. Я удалил startUpdate(), finishUpdate() и все такое. Я не знаю, где именно они используются. Но работало без них.

person cgr    schedule 12.07.2015