Как настроить элементы списка? - PullRequest
1 голос
/ 17 июля 2010

Я новичок в разработке Blackberry. Мое приложение содержит пять элементов списка, каждый из которых содержит строки. Мое требование - когда выбирается одна ячейка, она должна увеличиваться, а другие элементы автоматически настраивают пространство между ними.Я взял два типа изображений для элементов списка, один для общего вида и один для отображения выбранного элемента, когда пользователь щелкнул по нему, который имеет большую высоту, чем предыдущий.

Но проблема в том, что когда я выбрал один элемент, этоувеличивается и накладывается на следующий элемент и не отображает полный элемент и не корректирует пространство между ними.может кто-нибудь дать мне решение для этого.Я использую следующий фрагмент кода ....

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

public void drawListRow (ListField arg0, графическая графика, индекс int, int y, ширина int) {

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

1 Ответ

2 голосов
/ 20 августа 2010

Поля списка в BlackBerry предполагают, что все строки имеют одинаковую высоту.

Чтобы получить желаемый эффект, используйте набор выбираемых полей в VerticalFieldManager, вы получите эффект, аналогичный ListField. Убедитесь, что ваши элементы фокусируются, и вызывайте updateLayout всякий раз, когда они получают или теряют фокус, а затем в вашем методе layout установите высоту поля в зависимости от того, сфокусировано оно или нет. Что-то вроде следующего плана:

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

}
...