Frage

Ich bin neu in der Blackberry-Entwicklung. Meine Anwendung enthält fünf Listenelemente mit Zeichenfolgen für jedes Element. Meine Anforderung ist, dass eine ausgewählte Zelle vergrößert werden soll und der Platz zwischen anderen Elementen automatisch angepasst wird.Ich habe zwei Arten von Bildern für Listenelemente erstellt, eines für die allgemeine Ansicht und eines für die Anzeige des ausgewählten Elements, wenn der Benutzer darauf klickt, das höher ist als das vorherige.

Das Problem besteht jedoch darin, dass, wenn ich ein Element ausgewählt habe, es sich vergrößert und das nächste Element überlappt und nicht das gesamte Element anzeigt und der Abstand zwischen ihnen nicht angepasst wird.Kann mir jemand die Lösung dafür geben?Ich verwende den folgenden Codeausschnitt....

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

public void Drawlistrow (Listfield Arg0, Grafikgrafik, 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));
    }
}
War es hilfreich?

Lösung

Listenfelder auf BlackBerry gehen davon aus, dass alle Zeilen die gleiche Höhe haben.

Um den gewünschten Effekt zu erzielen, verwenden Sie eine Reihe auswählbarer Felder in einem VerticalFieldManager, erhalten Sie einen ähnlichen Effekt wie ein ListField.Stellen Sie sicher, dass Ihre Artikel fokussierbar sind, und rufen Sie an updateLayout Wann immer sie den Fokus gewinnen oder verlieren, dann in Ihrem layout Legen Sie mit dieser Methode die Höhe des Felds fest, je nachdem, ob es fokussiert ist oder nicht.So etwas wie die folgende Gliederung:

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

}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top