样式多列表行的问题分别代号为

时间:2016-01-07 09:50:04

标签: java codenameone

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);
}

1 个答案:

答案 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确定背景的样式。