在Codename One MultiList
课程中,我可以使用MultiLine1
等样式自定义单个元素。但是,我希望有更强大的方式通过颜色编码单个元素的样式。例如。我希望一行是绿色,另一行是黄色,并以应用程序业务逻辑为基础。
但是,由于MultiList
API的不透明性,因此难以定制。
更新
for (int i = 0; i < 3; i++) {
Hashtable hm = (Hashtable) fetchresponses.get(i);
String detailsHome = (String) hm.get("details");
newsIdValue = (String) hm.get("news_id");
HashMap <String, Object> m = new HashMap <String, Object> ();
m.put("Line1", detailsHome);
m.put("Line1_uiid", "red");
m.put("newsIdHome", newsIdValue);
m.put("newsIdHome_uiid", "blue");
// m.put("MultiButton_uiid","red"); //does nothing
// i want this row containing detailsHome & newsIdValue to be of diff. bg
newsHome.add(m);
}
答案 0 :(得分:0)
MultiList
旨在使用简单,但不像使用您自己的渲染器构建自己的列表那样动态。我还建议完全避免使用列表,并使用Component
/ Container
或无限滚动表示10,000行以下的任何内容。在这些情况下,这个问题根本不存在。
我们在此处描述了这样做:https://www.codenameone.com/blog/json-overscroll-more.html
使用MultiList / GenenricListCellRenderer是常见问题之一 制作一个UI,其中列表渲染器中的特定组件具有 不同的UIID风格。例如。这有助于在其中标记标签 列表为红色,例如在货币列表的情况下 交易。到目前为止,我们唯一的答案是:你需要 创建自己的渲染器。随着最新版本 GenericListCellRenderer(MultiList使用GenericListCellRenderer 在内部)我们有另一种选择。
通常为我们使用的这种类型的渲染器构建模型 类似的东西:
map.put("componentName", "Component Value");
如果我们想要componentName为红色怎么办?只需使用: map.put(“componentName_uiid”,“red”);
这会将uiid“red”应用于您可以使用的组件 他们的风格。请注意,一旦你开始这样做,你需要 为所有条目定义此条目,例如:
map.put("componentName_uiid", "blue");
否则,组件将在下一个条目中保持红色(从那时起) 渲染器就像一个橡皮图章。)
要对MultiList中默认未命名的父组件执行此操作,请执行以下操作:
list.getSelectedButton().setName("RenderMB");
list.getUnselectedButton().setName("RenderMB");
然后,您可以使用RenderMB_uiid
确定背景的样式。