codenameone 选择器 ComboBox 的替代品
codenameone Picker Alternative to ComboBox
Codename One
我的脚弄湿了。我研究了更多其他选项,例如跨平台的 Xamarin
、PhoneGap
、Ionic
,但我有点迷上了 Codename one
,因为它只编码一次,而 运行任何地方。
我一直在浏览 ui 个元素,但我有点受阻于填充 combobox
(备选方案是 Picker
)
假设我将商店作为值对 (storeId
、storeName
)。我想在 Picker
中显示 storeName
但保留 storeId
作为值参考。
选择商店后,我想将 storeId
传递给 API 调用。
这可能吗。这可能是一个非常简单的问题,但似乎有点难以实现(我真的是移动新手)。
谢谢。
我们的建议是avoid ComboBox。这是一种 UI 模式,在 iOS 上本机不存在,在现代手机上会感觉很陌生。它存在于代号一中。
在上述示例的这段代码中,您可以获得与复杂的多字段组合框类似的效果:
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();
如果您坚持使用 ComboBox
,您可以使用模型为其提供您想要的任何对象数据。然后创建一个单元格渲染器来显示数据。这些都在 component section of Codname One's developer guide 中进行了深入讨论。请注意,由于 ComboBox
派生自 List
许多 List
提示和文档适用于 ComboBox
.
Codename One
我的脚弄湿了。我研究了更多其他选项,例如跨平台的 Xamarin
、PhoneGap
、Ionic
,但我有点迷上了 Codename one
,因为它只编码一次,而 运行任何地方。
我一直在浏览 ui 个元素,但我有点受阻于填充 combobox
(备选方案是 Picker
)
假设我将商店作为值对 (storeId
、storeName
)。我想在 Picker
中显示 storeName
但保留 storeId
作为值参考。
选择商店后,我想将 storeId
传递给 API 调用。
这可能吗。这可能是一个非常简单的问题,但似乎有点难以实现(我真的是移动新手)。
谢谢。
我们的建议是avoid ComboBox。这是一种 UI 模式,在 iOS 上本机不存在,在现代手机上会感觉很陌生。它存在于代号一中。
在上述示例的这段代码中,您可以获得与复杂的多字段组合框类似的效果:
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();
如果您坚持使用 ComboBox
,您可以使用模型为其提供您想要的任何对象数据。然后创建一个单元格渲染器来显示数据。这些都在 component section of Codname One's developer guide 中进行了深入讨论。请注意,由于 ComboBox
派生自 List
许多 List
提示和文档适用于 ComboBox
.