Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java ME (J2ME) > Навигация по экранам


Автор: Anton Vatchenko 12.10.2005, 11:26
У меня хитрая навигация между меню, причем при выборе одного пункта меню - другое меню должно сразу генерироваться. Также из следующего меню можно вернуться в предыдущее. Как реализовать, чтобы не терялась память?

Автор: batigoal 12.10.2005, 12:01
Не понял. Разве меню создается заново при новом обращении?

Автор: Anton Vatchenko 12.10.2005, 12:11
Lamer George
Так я хочу, чтобы оно создавалось. Например, в одном меню выбираешь сложность игры (слабак, норм, сложн), и в следующем меню выбираешь карту для "играния". Как такое реализовать??? Допустим, все реализуется формами, или списками...
Добавлено @ 12:12
Пусть в зависимости от сложности будут соответствующие карты...
Добавлено @ 12:14
... и без преждевременного создания всех меню (их может быть очень много, и активизация трех из сотни созданных - тупо)

Автор: javastic 12.10.2005, 13:11
Я делал что-то похожее. Проверял состояние спец. атрибута, затем убивал все созданные команды и создавал на основании этого спец. атрибута нужные команды.
Да и ещё, нужно ещё из прослушиваемого объекта удалять команды (removeCommand) перед добавлением новых. Я делал так. Может кто знает способ попроще.

Автор: Dancer 13.10.2005, 06:56
Если у тебя одно меню сложность, а другое меню выбор карты - то их думаю лучше держать статически, и не пересоздавать каждый раз. Все остальные менюхи которые появляются может быть и имеет смысл пересоздавать, но вот какие-то конкретные списки (сложность, MainMenu, Help, About etc.) лучше создавать один раз при инициализации твоего приложения и потом в нужный момент их только показывать на экране.
Ты хочешь в зависимости от сложности иметь разный набор карт, но ведь названия этих карт ты будешь где-то хранить.
Пусть у тебя уже есть
Код

  String [] [] mapsOfLevel = {
      {"1","2","3"}, //easyLevel
      {"10","20","30"}, //  hardLevel  
      {"10","200","300"} //  expertLevel
  };
  
  int playerLevel = 0; // лучше организовать какой нить класс менеджер, в через который мы сможем получать текущие 
                                 // состояния (значения) всех значимых (условно назовём их глобалными) наших переменных
  // из этот класса менеджера будем получать текущий выбранный уровень игроком 
  // что-то вроде  playerLevel = GameManager.getPlayerLevel()

  Form playerMaps = new Form("Game's Maps");


в принципе, я не знаю как у тебя будет логика выстроена при выборе, но пусть будет, что каждый уровень только свои карты имеет и не может иметь карты из других уровней (для простоты)
Организуем совой метод show() при вызове которого будет у нас отрисовываться наша формочка.

Код

  public void show() {
    deleteAll();
    for(int i=0; i<mapsOfLevel[playerLevel].length; i++ ) {
        append(mapsOfLevel[playerLever][i]);
        append("\n"); //так как это у тебя форма, в данном случае конечно лучше было бы использовать List
    }
     disp.setCurrent(this); // disp либо в GameManager хранишь, либо ещё как то. disp = Display.getDisplay(MIDlet mid);
     // конкретно для меню выбора карт нужно думаю всего две кнопочки (BACK, SELECT)
     // их думаю можно сразу в конструкторе добавлять и не мучаться
  }

Автор: W0LF 9.2.2006, 19:09
а можно просто реализовать интерфейс GuiListener:
Код

public interface GuiListener{
    
    public void showNotify();

    public void hideNotify();

}


ну а в самом мидлете так:
Код

Displayable currentDisplayable;
public static synchronized void setDisplay(Displayable d){
        if(currentDisplayable instanceof GuiListener) 
            ((GuiListener)currentDisplayable).hideNotify();
        currentDisplayable = d;
        if(d instanceof GuiListener)
            ((GuiListener)d).showNotify();

        if(currentDisplayable == d){
            if(currentDisplayable instanceof Form){
                ((Form)currentDisplayable).setItemStateListener(null);
            }
            display.setCurrent(d);
            if(d instanceof Form){
                ((Form)d).setItemStateListener(midlet);
            }
        }

    } 


Этот метод был разработан моим наставником smile, ник которого wInux
Спасибо, Дим ты меня многому научил.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)