Исключение недопустимого состояния: поле добавлено в диспетчер, хотя оно уже является родительским.

Я получаю исключение IllegalStateException :

Поле добавлено в диспетчер, когда оно уже является родительским

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

Вот мой код:

void showSpinnerDialog(int type) {
    if (_customSpinnerPopup == null) {
        _customSpinnerPopup = new CustomSpinnerPopup();
    }

    UiApplication.getUiApplication().pushModalScreen(_customSpinnerPopup);

    if (_customSpinnerPopup.isSet()) {
        String choice = _customSpinnerPopup.getChoice();
        _editFieldSpinbox.setText(choice);
        getAlbumsForLanguage(choice);
    }
}

private void getAlbumsForLanguage(String choice) {
    language = choice;
    fieldManager.deleteAll();

    final RichList list = new RichList(fieldManager, true, 2, 1);
    songItemsList = new Vector();
    songItemsList = ServerAPI.getNewSongsForLanguage(language, null);
    for (int i = 0; i < songItemsList.size(); i++) {
        SongItem songItem = (SongItem) songItemsList.elementAt(i);
        list.add(new Object[] { bitmap1, songItem.getName(),
            "Artist:" + songItem.getArtist(),
        "Movie: " + songItem.getMovie() });
    }

    add(fieldManager);// **here i am getting exception**
    list.setFocusPolicy(TableController.ROW_FOCUS);

    list.setCommand(new Command(new CommandHandler() {

        public void execute(ReadOnlyCommandMetadata metadata, Object object) {
            SongItem song = (SongItem) songItemsList.elementAt(list.getFocusRow());
            Dialog.alert("exe !" + song.getName());

person meera    schedule 19.04.2013    source источник


Ответы (1)


Как следует из сообщения об исключении, вы не можете добавить Field или Manager (то есть Field) в другой контейнер более одного раза, если сначала не удалите его. Когда вы вызовете getAlbumsForLanguage() во второй раз, вы вызовете это:

add(fieldManager);// **here i am getting exception**

второй раз, что незаконно. Чтобы решить эту проблему, просто окружите эту строку следующим образом:

if (fieldManager.getManager() == null) {
   add(fieldManager);
}
person Nate    schedule 19.04.2013