Blackberry Java TableView: СчитатьVerticalScrollAmount Исключение? - PullRequest
2 голосов
/ 24 августа 2011

Я получаю исключение «TableView (ScrollView) .calculateVerticalScrollAmount (XYRect)» при попытке создать таблицу, используя следующий код. Я пытался упростить поля, но, кажется, ничто не помогает, есть мысли? Код аналогичен тому, что приведен в демонстрационной таблице, поставляемой с BB 6 SDK.

Это похоже на проблему с макетом, но я не могу точно определить причину ошибки.

    // Create and apply style
    RegionStyles style = new RegionStyles(BorderFactory.createSimpleBorder(new XYEdges(1, 1, 1, 1), Border.STYLE_SOLID), null, null,
    null, RegionStyles.ALIGN_LEFT, RegionStyles.ALIGN_TOP);

    // Create the view and controller
    TableView tableView = new TableView(_tableModel);
    TableController tableController = new TableController(_tableModel, tableView);

    // Set the controller focus policy to highlight rows
    tableController.setFocusPolicy(TableController.ROW_FOCUS);

    // Set the behaviour of the controller when a table item is clicked
    tableController.setCommand(new CommandHandler()
    {
        /**
         * @see CommandHandler#execute(ReadOnlyCommandMetadata, Object)
         */
        public void execute(ReadOnlyCommandMetadata metadata, Object context)
        {
            Dialog.alert("Command Executed");
        }

    }, null, null);

    tableView.setController(tableController);

    // Create a DataTemplate that suppresses the third column
    DataTemplate dataTemplate = new DataTemplate(tableView, 2, 3)
    {
        /**
         * @see DataTemplate#getDataFields(int)
         */
        public Field[] getDataFields(int modelRowIndex)
        {
            Object[] data = (Object[]) ((TableModel) getView().getModel()).getRow(modelRowIndex);

            Field[] fields = new Field[4];
            fields[0] = new BitmapField((Bitmap) data[0]);
            fields[1] = new LabelField(data[1], Field.FOCUSABLE);
            fields[2] = new LabelField(data[2], Field.FOCUSABLE);
            fields[3] = new LabelField(data[3], Field.FOCUSABLE);

            return fields;
        }
    };

    // Set up regions
    dataTemplate.createRegion(new XYRect(0, 0, 1, 2), style);
    dataTemplate.createRegion(new XYRect(1, 0, 2, 1), style);
    dataTemplate.createRegion(new XYRect(1, 1, 1, 1), style);
    dataTemplate.createRegion(new XYRect(2, 1, 1, 1), style);

    // Specify the size of each column by percentage, and the height of a row        
    dataTemplate.setColumnProperties(0, new TemplateColumnProperties(15, TemplateColumnProperties.PERCENTAGE_WIDTH));
    dataTemplate.setColumnProperties(1, new TemplateColumnProperties(15, TemplateColumnProperties.PERCENTAGE_WIDTH));
    dataTemplate.setColumnProperties(2, new TemplateColumnProperties(70, TemplateColumnProperties.PERCENTAGE_WIDTH));
    dataTemplate.setRowProperties(0, new TemplateRowProperties(ROW_HEIGHT));
    dataTemplate.setRowProperties(1, new TemplateRowProperties(ROW_HEIGHT));

    // Apply the template to the view
    tableView.setDataTemplate(dataTemplate);
    dataTemplate.useFixedHeight(true);

    add(tableView);

1 Ответ

4 голосов
/ 16 июля 2012

Не уверен, если вы все еще боретесь с этим - могут быть преимущества для других

в заявлении

DataTemplate dataTemplate = new DataTemplate(tableView, 2, 3)

вы инициализировали шаблон данных с двумя строками и тремя столбцами (при условии, что вы хотите подавить четвертый столбец). Но внутри функции getDataFields вы возвращаете 4 поля.

Это вызывает сбой (внутренний код не защищен от обезьян). Удалите 4-е поле из массива, и оно должно работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...