2016-11-25 44 views
2

我正在用Codename One弄湿我的脚。我已经研究了更多的其他选项,如Xamarin,PhoneGap,Ionic跨平台,但我有点吸引了Codename one,因为它真的编码一次,并在任何地方运行。codenameone Picker替代组合框

我已经经历UI元素,我有点阻塞填充一个combobox(另一种方法是Picker

比方说,我店为值对(storeIdstoreName)。我想在Picker中显示storeName,但保留storeId作为值参考。 选择商店后,我想将storeId传递给API调用。
这是可能的。这可能是一个非常简单的问题,但似乎有点难以实现(我对手机真的很陌生)。

谢谢。

回答

1

我们的建议是avoid ComboBox。这是一种UI本身并不存在的UI模式,在现代手机上会感觉陌生。它存在于Codename One中。

在从样品这段代码上面你可以得到一个复杂的多场组合框类似的效果:如果你坚持使用ComboBox你可以使用一个模型

Form hi = new Form("Button", BoxLayout.y()); 

String[] characters = { "Tyrion Lannister", "Jaime Lannister", "Cersei Lannister"}; 
String[] actors = { "Peter Dinklage", "Nikolaj Coster-Waldau", "Lena Headey"}; 
int size = Display.getInstance().convertToPixels(7); 
EncodedImage placeholder = EncodedImage.createFromImage(Image.createImage(size, size, 0xffcccccc), true); 
Image[] pictures = { 
    URLImage.createToStorage(placeholder, "tyrion","http://i.lv3.hbo.com/assets/images/series/game-of-thrones/character/s5/tyrion-lannister-512x512.jpg"), 
    URLImage.createToStorage(placeholder, "jaime","http://i.lv3.hbo.com/assets/images/series/game-of-thrones/character/s5/jamie-lannister-512x512.jpg"), 
    URLImage.createToStorage(placeholder, "cersei","http://i.lv3.hbo.com/assets/images/series/game-of-thrones/character/s5/cersei-lannister-512x512.jpg") 
}; 

MultiButton b = new MultiButton("Pick A Lanister..."); 
b.addActionListener(e -> { 
    Dialog d = new Dialog(); 
    d.setLayout(BoxLayout.y()); 
    d.getContentPane().setScrollableY(true); 
    for(int iter = 0 ; iter < characters.length ; iter++) { 
     MultiButton mb = new MultiButton(characters[iter]); 
     mb.setTextLine2(actors[iter]); 
     mb.setIcon(pictures[iter]); 
     d.add(mb); 
     mb.addActionListener(ee -> { 
      b.setTextLine1(mb.getTextLine1()); 
      b.setTextLine2(mb.getTextLine2()); 
      b.setIcon(mb.getIcon()); 
      d.dispose(); 
      b.revalidate(); 
     }); 
    } 
    d.showPopupDialog(b); 
}); 
hi.add(b); 
hi.show(); 

enter image description here

给它任何你想要的对象数据。然后创建一个单元格渲染器来显示数据。这一切都在component section of Codname One's developer guide深入讨论。请注意,由于ComboBox来自List大多数List提示和文档适用于ComboBox

+0

谢谢Shai的快速回复。我意识到组合框不是我们要走的路,我喜欢Multibutton的想法。唯一不确定的是如何检索选定项目的ID。 我相信应该有一种方法来获取所选项目的值。我会试一试。 谢谢。 – Ravimaran

+0

你可以使用get/putClientProperty()在组件上存储元数据看看我的答案在这里:http://stackoverflow.com/questions/40774454/codenameone-refresh-list-of-images-without-reloading-the-页面 –

+0

谢谢Shai。我会试一试。我一直很享受这一点。 – Ravimaran