2 votes

La liste LWUIT est terriblement lente

J'ai été confronté au problème bien connu de LWUIT. Mon composant de liste avec le moteur de rendu des cases à cocher défile très lentement. Si je teste mon application sur un émulateur, elle fonctionne sans problème (je constate néanmoins que l'utilisation du CPU atteint 60 % pendant le défilement), mais si je l'exécute sur un téléphone portable, il faut quelques secondes entre les mouvements du focus.

Il y a un code de rendu :

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

c'est le code de mon formulaire contenant la liste :

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

Je serais très reconnaissant pour toute aide !

1voto

Mun0n Points 4410

Nous devons être très prudents en construisant des habitations. List . Si nous avons fait quelque chose de mal, ils peuvent fonctionner pire que prévu. Je vous recommande de jeter un coup d'oeil à ceci

LWUIT Blog ListRender

Vous pouvez également réécrire votre méthode de peinture. La vitesse de votre liste sera augmentée.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X