После прочтения исходного кода Android, я думаю, у меня есть представление о проблемах здесь.
Новый элемент действительно был добавлен в group0
как рекламируется. Это можно проверить с помощью свойства groupId
. Но он не ведет себя как один. Похоже, что это две отдельные проблемы, которые у меня были.
- Элемент не удаляется при удалении группы.
Оказывается, это неверная конфигурация и ошибка Android. В исходном коде метода removeGroup(int groupId)
android начинает перебирать каждый пункт меню и проверяет его groupId
. Но он прерывает процесс, если следующий элемент больше не принадлежит целевой группе. Это приемлемая оптимизация, предполагающая, что все элементы в одной группе будут отображаться рядом друг с другом в окне навигации. «Неверная конфигурация» заключается в том, что я передал большое целое число для order
, в результате чего мой элемент появился намного позже в списке.
Решением здесь является передача 0
для параметра order
при добавлении пункта меню, чтобы они отображались рядом с существующими элементами в группе. Также можно переопределить функцию removeGroup
и удалить код «оптимизации».
- Элемент не разделяет
checkableBehavior
, определенный группой в XML.
Это потому, что isCheckable
на самом деле является свойством для каждого пункта меню, а не свойством группы. Поэтому, когда добавляются новые элементы, они автоматически не устанавливают isCheckable
правильно (хотя технически метод add
в Android мог бы легко сделать это для нас).
Решением здесь является вызов isCheckable = true
для каждого из вновь добавленных предметов.