0

我有一个 ListField 行为怪异,我没有很多 BB 开发经验,但是在互联网上进行了大量搜索后,我得到了以下结果。我用这个教程 做了很多 ListField 的东西。

这是我第一次打开屏幕并且不做任何其他事情时的屏幕截图:

屏幕 A

这是我向下滚动时的屏幕截图,这对所有字段都有相同的效果:

在此处输入图像描述

这是我根据上面提到的教程根据我的需要调整的实现:

private Bitmap p1;
TableRowManager row;
Vector rows;

public ImageListField(List list) {
    /* Init & Declaration */
    setEmptyString("This ListField has No Data", DrawStyle.HCENTER);
    setCallback(this);
    setRowHeight(50);
    Font.getDefault();
    p1 = Bitmap.getBitmapResource("no-image.png");
    rows = new Vector();
    for (int x = 0; x < list.size(); ++x) {
        Event e = (Event)list.getAt(x);

        row = new TableRowManager();

        BitmapField myImageField = new BitmapField(p1);
        row.add(myImageField);
        row.add(new LabelField(e.Name,
                DrawStyle.ELLIPSIS | FOCUSABLE){

            public void paint(Graphics g) {
                g.setBackgroundColor(Color.BLACK);
                g.fillRect(0, 0, getWidth(), getHeight());
                g.setColor(Color.WHITE);
                g.clear();
                super.paint(g);
            }

        });

        if(e.DateFrom.compareTo(e.DateTo) == 0)
        {
            row.add(new LabelField(e.DateFrom,
                    DrawStyle.ELLIPSIS | FOCUSABLE){

                public void paint(Graphics g) {
                    g.setBackgroundColor(Color.BLACK);
                    g.fillRect(0, 0, getWidth(), getHeight());
                    g.setColor(Color.WHITE);
                    g.clear();
                    super.paint(g);
                }

            });
        }
        else
        {
            row.add(new LabelField(e.DateFrom + " - " + e.DateTo,
                    DrawStyle.ELLIPSIS | FOCUSABLE){

                public void paint(Graphics g) {
                    g.setBackgroundColor(Color.BLACK);
                    g.fillRect(0, 0, getWidth(), getHeight());
                    g.setColor(Color.WHITE);
                    g.clear();
                    super.paint(g);
                }

            });
        }

        if(e.TimeFrom.compareTo(e.TimeTo) == 0)
        {
            row.add(new LabelField(e.TimeFrom,
                    DrawStyle.ELLIPSIS | FOCUSABLE){

                public void paint(Graphics g) {
                    g.setBackgroundColor(Color.BLACK);
                    g.fillRect(0, 0, getWidth(), getHeight());
                    g.setColor(Color.WHITE);
                    g.clear();
                    super.paint(g);
                }

            });
        }
        else
        {
            row.add(new LabelField(e.TimeFrom + " - " + e.TimeTo,
                    DrawStyle.ELLIPSIS | FOCUSABLE){

                public void paint(Graphics g) {
                    g.setBackgroundColor(Color.BLACK);
                    g.fillRect(0, 0, getWidth(), getHeight());
                    g.setColor(Color.WHITE);
                    g.clear();
                    super.paint(g);
                }

            });
        }

        row.add(new LabelField(e.Address,
                DrawStyle.ELLIPSIS | FOCUSABLE){

            public void paint(Graphics g) {
                g.setBackgroundColor(Color.BLACK);
                g.fillRect(0, 0, getWidth(), getHeight());
                g.setColor(Color.WHITE);
                g.clear();
                super.paint(g);
            }

        });

        row.add(new LabelField("R " + e.EntranceFee,
                DrawStyle.ELLIPSIS | FOCUSABLE){

            public void paint(Graphics g) {
                g.setBackgroundColor(Color.BLACK);
                g.fillRect(0, 0, getWidth(), getHeight());
                g.setColor(Color.WHITE);
                g.clear();
                super.paint(g);
            }

        });

        rows.addElement(row);
    }
    setSize(rows.size());
}

public void drawListRow(ListField listField, Graphics graphics, int index,
        int y, int width) {
    // TODO Auto-generated method stub
    ImageListField list = (ImageListField) listField;
    TableRowManager rowManager = (TableRowManager) list.rows
            .elementAt(index);
    rowManager.drawRow(graphics, 0, y, width, 119);
}

public Object get(ListField listField, int index) {
    // TODO Auto-generated method stub
    return rows.elementAt(index).toString();
}

public int getPreferredWidth(ListField listField) {
    // TODO Auto-generated method stub
    return Graphics.getScreenWidth();
}

public int getRowHeight() {
    // TODO Auto-generated method stub
    return 119;
}

public int getRowHeight(int arg0) {
    // TODO Auto-generated method stub
    return 119;
}

public int indexOfList(ListField listField, String prefix, int start) {
    // TODO Auto-generated method stub
    return -1;
}

protected boolean trackwheelClick(int status, int time) {
    int index = getSelectedIndex();
    Dialog.inform(Integer.toString(index));
    return true;
}

private class TableRowManager extends Manager {
    public TableRowManager() {
        super(0);
    }

    // Causes the fields within this row manager to be layed out then
    // painted.
    public void drawRow(Graphics g, int x, int y, int width, int height) {
        // Arrange the cell fields within this row manager.
        layout(width, height);
        // Place this row manager within its enclosing list.
        setPosition(x, y);
        // Apply a translating/clipping transformation to the graphics
        // context so that this row paints in the right area.
        g.pushRegion(getExtent());
        // Paint this manager's controlled fields.
        subpaint(g);
        g.setColor(0xFF0000);
        g.drawLine(0, height - 1, getPreferredWidth(), height - 1);
        g.drawLine(40, 0, 40, getPreferredHeight());
        // Restore the graphics context.
        g.popContext();
    }

    // Arrages this manager's controlled fields from left to right within
    // the enclosing table's columns.
    protected void sublayout(int width, int height) {
        // set the size and position of each field.
        int fontHeight = Font.getDefault().getHeight();
        int preferredWidth = getPreferredWidth();
        // start with the Bitmap Field of the priority icon
        Field field = getField(0);
        layoutChild(field, 75, 75);
        setPositionChild(field, 5, 5);
        // set the task name label field
        field = getField(1);
        layoutChild(field, preferredWidth, fontHeight + 2);
        setPositionChild(field, 85, 5);
        // set the list name label field
        field = getField(2);
        layoutChild(field, preferredWidth, fontHeight + 2);
        setPositionChild(field, 85, fontHeight + 6 + 5);
        // set the due time name label field
        field = getField(3);
        layoutChild(field, preferredWidth, fontHeight + 2);
        setPositionChild(field, 100, fontHeight + fontHeight + 8 + 5);

        field = getField(4);
        layoutChild(field, preferredWidth, fontHeight + 2);
        setPositionChild(field, 100, fontHeight + fontHeight + fontHeight + 10 + 5);

        field = getField(5);
        layoutChild(field, preferredWidth, fontHeight + 2);
        setPositionChild(field, 100, fontHeight + fontHeight + fontHeight + fontHeight + 12 + 5);

        setExtent(preferredWidth, getPreferredHeight());
    }

    // The preferred width of a row is defined by the list renderer.
    public int getPreferredWidth() {
        return Graphics.getScreenWidth();
    }

    // The preferred height of a row is the "row height" as defined in the
    // enclosing list.
    public int getPreferredHeight() {
        return 119;// getRowHeight();
    }


}

任何有关更改行高和位置的建议将不胜感激。

顺便说一句,这是在模拟器中。

4

1 回答 1

2

尝试设置setRowHeight(119);而不是setRowHeight(50);. 不确定它是否有帮助,因为它不是ListField发布代码中的常用应用程序/用法。

于 2013-02-14T21:47:28.807 回答