2012-10-25 143 views
2

我遇到了LWUIT中的衆所周知的問題。我的列表組件與複選框渲染器滾動非常緩慢。如果要在仿真器上測試我的應用程序,它的運行會非常順利(但我認爲在滾動操作期間CPU利用率高達60%),但如果要在移動電話上運行,則焦點移動之間需要幾秒鐘。LWUIT列表工作非常緩慢

有渲染器的代碼:

public class CheckBoxMultiselectRenderer extends CheckBox implements ListCellRenderer { 

public CheckBoxMultiselectRenderer() { 
    super(""); 
} 

//override 
public void repaint() { 
} 

public Component getListCellRendererComponent(List list, Object value, 
int index,boolean isSelected) { 
    Location loc = (Location)value; 
    setText(loc.getLocationName()); 
    setFocus(isSelected); 
    setSelected(loc.isSelected()); 

    return this; 
} 

public Component getListFocusComponent(List list) { 
    setText(""); 
    setFocus(true); 
    getStyle().setBgTransparency(Consts.BG_TRANSPARENCY); 
    return this; 
} 
} 

這是我的表單包含列表代碼:

protected void createMarkup() { 
    Form form = getForm(); 
    form.setLayout(new BorderLayout()); 
    form.setScrollable(false); 

    Label title = new Label("Choose location zone:"); 
    title.getStyle().setMargin(5, 5, 0, 0); 
    title.getStyle().setBgTransparency(Consts.BG_TRANSPARENCY); 
    title.setAlignment(Component.CENTER); 

    form.addComponent(BorderLayout.NORTH, title); 

    list = new List(StateKeeper.getLocationsAsList()); 
    list.setFixedSelection(List.FIXED_NONE_CYCLIC); 
//  list.setSmoothScrolling(true); 
    list.getStyle().setBgTransparency(0); 
    list.setListCellRenderer(new CheckBoxMultiselectRenderer()); 
    list.addActionListener(new ActionListener(){ 
     public void actionPerformed(ActionEvent ae){ 
//    List l = (List)ae.getSource(); 
//    l.requestFocus(); 
//    l.setHandlesInput(true); 
      Location selItem = (Location)list.getSelectedItem(); 
      selItem.setSelected(!selItem.isSelected()); 
     } 
    }); 

    form.addComponent(BorderLayout.CENTER, list); 
} 

我將是任何幫助非常感謝!

回答

1

我們必須如此謹慎地建設lwuit List。如果我們犯了錯誤,他們的工作會比預期的更糟糕。我建議你去看看這個

LWUIT Blog ListRender

您也可以重寫paint方法。你的名單的速度將會增加。