LWUIT 1.5 Как записать событие нажатия вкладки, извлечь контент с сервера и показать его на выбранной вкладке? - PullRequest
1 голос
/ 08 марта 2012

Я использую вкладки LWUIT 1.5 для отображения уведомлений. У меня есть три Tabs, и я получаю уведомления от веб-службы php. Я успешно получил список уведомлений для первого Tab. Но в течение следующих двух Tabs я не понимаю, какой код я должен написать

  1. Обнаружить, что нажата вторая / третья Tab. Я знаю, как добавить commandListener к Button. Что commandListener есть для Tab выбора?
  2. Как обновить содержимое Tab при получении новых данных с сервера?

    private void showNotificationList () {

    try {
    
        Form f = new Form("Notifications");
        f.setScrollable(false);
        f.setLayout(new BorderLayout());
        final List list = new List(getNotifications()); //gets hashtables - notices
        list.setRenderer(new GenericListCellRenderer(createGenericRendererContainer(), createGenericRendererContainer()));
        list.setSmoothScrolling(true);
        //System.out.println("adding list component to listview");
        list.addActionListener(new ActionListener() {
    
            public void actionPerformed(ActionEvent evt) {
                int i = list.getSelectedIndex();
                noticeDetailsForm(notices[i]);
                //Dialog. show( "title",  notices[i].toString(),  "ok",  "exitt");
            }
        });
        //Container c2 = new Container(new BoxLayout(BoxLayout.Y_AXIS));
        //c2.addComponent(list);
        Tabs tabs = new Tabs(Tabs.TOP);
        tabs.addTab("Recent", list);
        tabs.addTab("Urgent", new Label("urgent goes here"));
        tabs.addTab("Favourites", new Label("favs goes here"));
    
        //f.addComponent(tabs);
        f.addComponent(BorderLayout.CENTER, tabs);
        Command backComm = new Command("Back") {
    
            public void actionPerformed(ActionEvent ev) {
                Dashboard.dbInstance.setUpDashboard();
    
            }
        };
        f.addCommand(backComm);
        //System.out.println("showing lsit form");
        f.show();
    } catch (Exception ex) {
        ex.printStackTrace();
    }
    

    } * * тысяча двадцать-один

    private Container createGenericRendererContainer() throws IOException { //System.out.println("container called");
    
    //System.out.println("container called");
    Container c = new Container(new BorderLayout());
    c.setUIID("ListRenderer");
    
    Label xname = new Label("");
    Label description = new Label();
    Label focus = new Label("");
    Container cnt = new Container(new BoxLayout(BoxLayout.Y_AXIS));
    xname.setName("Name");
    xname.getStyle().setBgTransparency(0);
    xname.getStyle().setFont(Font.createSystemFont(Font.FACE_SYSTEM, Font.STYLE_BOLD, Font.SIZE_MEDIUM));
    //description.setFocusable(true);
    description.setName("Description");
    cnt.addComponent(xname);
    cnt.addComponent(description);
    c.addComponent(BorderLayout.CENTER, cnt);
    Button thumb = new Button(Image.createImage("/res/home-work.png"));
    //Image img = Image.createImage("/res/home-work.png");
    c.addComponent(BorderLayout.WEST, thumb);
    
    return c;
    

    }

    private Hashtable [] getNotifications () { int total = notices.length; //System.out.println(total); Hashtable [] data = new Hashtable [total]; // Hashtable [] data = new Hashtable [5]; / data [0] = new Hashtable (); data [0] .put («Имя», «Шай»); data [0] .put («Фамилия», «Альмог»); data [0] .put («Selected», Boolean.TRUE); /

    for (int i = 0; i < total; i++) {
        data[i] = new Hashtable();
        //System.out.println(notices[i].getName());
        data[i].put("Name", notices[i].getName());
        data[i].put("Description", notices[i].getDescription());
        data[i].put("Id", Integer.toString(notices[i].getId()));
    }
    
    return data;
    

    }

1 Ответ

2 голосов
/ 11 марта 2012

1) У меня была та же проблема, и я решил ее, переопределив Keyreleased из Form, а не Tab, и внутри него я проверяю компонент, который сфокусирован, и если это Tab get "tab.selectedIndex ", чтобы определить, в каком Tab я и загружать соответствующие данные.Вот пример кода (это внутри моей производной формы, которая расширяет форму)

**

public void keyReleased(int keyCode) {
        Component p=this.getFocused();
       String str= p.getClass().getName();
    if(str.toLowerCase().indexOf("radiobutton")!=-1){    // Radiobutton because when u 
  Here do tab specific work                              focus on the 
                                                         tab it returns radiobutton.                                    
                                                         lwuit understands tabs as list   
                                                         of radiobuttons 
                      }**

2) и об обновлении данных я сделал решение, и я не знаю, еслиправильно, я получаю новые данные, создаю новый List, удаляю старый и присоединяю новый, затем вызываю Form.repaint();

...