2

LWUIT のよく知られた問題に直面しました。チェックボックス レンダラーを使用したリスト コンポーネントのスクロールが非常に遅くなります。エミュレーターでアプリケーションをテストすると、非常にスムーズに実行されます (それでも、スクロール操作中に CPU 使用率が最大 60% に跳ね上がることがわかります)。しかし、携帯電話で実行すると、フォーカス移動の間に数秒かかります。

レンダラーのコードがあります:

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

どんな助けにもとても感謝しています!

4

1 に答える 1

1

lwuit の作成には細心の注意を払う必要がありますList。私たちが何か間違ったことをした場合、彼らは予想よりも悪い働きをする可能性があります. これを見てみることをお勧めします

LWUIT ブログ ListRender

paint メソッドを書き換えることもできます。リストの速度が向上します。

于 2012-10-26T10:01:56.083 に答える