Pregunta

Soy nuevo en el desarrollo de Blackberry. Mi aplicación contiene cinco elementos de lista con cadenas en cada elemento. Mi requisito es que cuando se selecciona una celda, debe ampliarse y otros elementos ajustan el espacio automáticamente entre ellos.Tomé dos tipos de imágenes para los elementos de la lista, una para la vista general y otra para mostrar el elemento seleccionado cuando el usuario hizo clic en él, que tiene más altura que el anterior.

Pero el problema es que cuando seleccioné un elemento, se amplía y se superpone al siguiente y no muestra el elemento completo ni ajusta el espacio entre ellos.¿Alguien puede darme la solución para esto?Estoy usando el siguiente fragmento de código....

_listField.setCallback(this);
    _listField.setRowHeight(45);
    _listField.setChangeListener(this);

public void Drawlistrow (ListField Arg0, Graphics Graphics, int index, int y, int width) {

    if (listFieldIndex != index) {

        graphics.drawBitmap(0, y, listBkgrnd.getWidth(), listBkgrnd
                .getHeight(), listBkgrnd, 0, 0);

        graphics.setColor(0xAA0000);
        graphics.setFont(this.getFont().derive(Font.BOLD, 17));
        graphics.drawText(((Station) _stationList.elementAt(index))
                .getStationName(), 15, y + 15, 0,
                (listBkgrnd.getWidth() - 70));

        graphics.setColor(0x770000);
        graphics.setFont(this.getFont().derive(Font.PLAIN, 13));

        // graphics.drawText(
        // ((Station) _stationList.elementAt(index)).getCT(), 15,
        // y + 40, 0, (listBkgrnd.getWidth() - 65));

    } else {

        graphics.drawBitmap(0, y, playBkgrnd.getWidth(), playBkgrnd
                .getHeight(), playBkgrnd, 0, 0);

        graphics.setColor(0xAA0000);
        graphics.setFont(this.getFont().derive(Font.BOLD, 17));
        graphics.drawText(((Station) _stationList.elementAt(index))
                .getStationName(), 15, y + 15, 0,
                (playBkgrnd.getWidth() - 70));

        graphics.setColor(0x770000);
        graphics.setFont(this.getFont().derive(Font.PLAIN, 13));

        graphics.drawText(
                    s.getCT(), 15,
                    y + 40, 0, (playBkgrnd.getWidth() - 65));
    }
}
¿Fue útil?

Solución

Los campos de lista en BlackBerry suponen que todas las filas tienen la misma altura.

Para obtener el tipo de efecto que desea, utilice varios campos seleccionables en un VerticalFieldManager, obtendrás un efecto similar al de ListField.Asegúrese de que sus elementos sean enfocables y llame updateLayout Cada vez que ganan o pierden concentración, entonces en tu layout método, establezca la altura del campo según si está enfocado o no.Algo como el siguiente esquema:

public class CustomListFieldItem extends Field {

    public boolean isFocusable() {
        return true;
    }

    protected void onFocus(int direction) {
        super.onFocus(direction);
        updateLayout();
    }

    protected void onUnfocus() {
        super.onUnfocus();
        updateLayout();
    }

    protected void layout(int width, int height) {
        if (isFocus()) {
            setExtent(width, playBkgrnd.getHeight());
        }
        else {
            setExtent(width, listBkgrnd.getHeight());
        }

    }

    protected void paint(Graphics graphics) {
        if (isFocus()) {
            // draw selected item
        }
        else {
            // draw unselected item
        }
    }

}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top