Решение итератора:
Вероятно, у вас должно быть что-то вроде этого:
class WindowLauncherClass {
SortedSet set = null;
Iterator setIterator = null;
public WindowLauncherClass(SortedSet set) {
this.set = set; // or you can copy it if that's what you need.
}
protected void launchWindow(Object item) {
// impl
}
public void onActivityResult() {
if ( setIterator != null && setIterator.hasNext() )
{
launchWindow(setIterator.next());
}
}
public void start() {
setIterator = set.iterator();
onActivityResult();
}
}
В комментариях появился вопрос об обновлениях к набору. Увидит ли это итератор?
Обычный ответ зависит от требований приложения. В этом случае у меня нет всей информации, и я постараюсь угадать.
до версии 1.5 не было только одной реализации SortedSet (TreeSet). это был неудачный быстрый итератор.
В jdk 6 появилась новая реализация: ConcurrentSkipListSet. Итератор для этого отсортированного набора не является быстродействующим.
Если вы добавляете в набор элемент, «меньший», чем отображаемый в данный момент элемент, вы все равно не сможете его увидеть с помощью «хорошего» (не быстрого сбоя) итератора. Если вы добавляете элемент «больше», чем текущий отображаемый элемент, вы увидите его с помощью правильного итератора.
Окончательное решение - сбросить набор и итератор при создании правильного изменения. Изначально используя ConcurrentSkipListSet, вы увидите только «большие» изменения, а при использовании TreeSet вы будете терпеть неудачу при каждом обновлении.
Если вы позволяете пропустить обновления «меньшего размера», чем текущие, тогда переходите на jdk 6.0 и ConcurrentSkipListSet. Если нет, то вам придется следить за тем, что вы отобразили, и восстановить правильный набор с новыми и неиспользованными предметами.