LWUIT 1.5 Как записать событие нажатия вкладки, извлечь контент с сервера и показать его на выбранной вкладке?
Я использую вкладки LWUIT 1.5 для отображения уведомлений. у меня есть три Tabs
и я получаю уведомления от веб-службы php. Я успешно получил список уведомлений для первого Tab
, Но для следующих двух Tabs
Я не понимаю, какой код я должен написать
- Определить, что второй / третий
Tab
нажата. Я знаю как добавитьcommandListener
кButton
, КакиеcommandListener
там дляTab
выбор? Как обновить содержимое
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 ("Выбрано", 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 ответ
1) У меня была такая же проблема, и я решил ее, переопределив Keyreleased
из Form
не Tab
и внутри него я проверяю компонент, который сосредоточен, и если это Tab
получить "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()
;