我是黑莓开发的新手。当我单击任何列表项时,我想添加一个复选框或勾选标记。当我尝试运行时,会出现 104 错误。
public final class ListDemoScreen extends MainScreen {
    private Vector _listElements;
    private int LEFT_OFFSET = 10;
    private int TOP_OFFSET = 10;
    ListField list;
    private ListField _checkList;
    private MenuItem _toggleItem;
    public ListDemoScreen() {
        super(Manager.NO_VERTICAL_SCROLL);
        // Set the displayed title of the screen
        setTitle("List Demo 1");
        add(new LabelField("Fruits List", LabelField.FIELD_HCENTER));
        add(new SeparatorField());
        _listElements = new Vector();
        add(new SeparatorField());
        list = new ListField();
        ListCallback _callback = new ListCallback(this);
        list.setCallback(_callback);
        list.setSize(4);
        int index = list.getSelectedIndex();
        add(list);
        createField();
    }
    protected void createField() {
        String itemOne = "Apple";
        String itemTwo = "Blackberry";
        String itemthree = "Grapes";
        String itemfour = "Banana";
        _listElements.addElement(itemOne);
        _listElements.addElement(itemTwo);
        _listElements.addElement(itemthree);
        _listElements.addElement(itemfour);
        reloadList();
    }
    private void reloadList() {
        list.setSize(_listElements.size());
    }
    public boolean invokeAction(int action) {
        switch (action) {
        case ACTION_INVOKE: // Trackball click.
            int index = list.getSelectedIndex();
            ChecklistData data = (ChecklistData) _listElements.elementAt(index);
            data.toggleChecked();
            _listElements.setElementAt(data, index);
            list.invalidate(index);
            return true; // We've consumed the event.
        }
        return super.invokeAction(action);
    }
    class ListCallback implements ListFieldCallback {
        ListDemoScreen listDemoScreen;
        public ListCallback(ListDemoScreen listDemoScreen)
        {
            this.listDemoScreen=listDemoScreen;
        }
        public void drawListRow(ListField list, Graphics g, int index, int y,
                int w) {
            String text = (String) _listElements.elementAt(index);
            g.drawText(text, 60, y + 5, 0, w);
            text = (String) _listElements.elementAt(index);
            Bitmap bitm = Bitmap.getBitmapResource("bullet_arrow.png");
            int xpos = LEFT_OFFSET;
            int ypos = TOP_OFFSET + y;
            w = bitm.getWidth();
            int h = bitm.getHeight();
            g.drawBitmap(xpos, ypos, w, h, bitm, 0, 0);
            xpos = w + 20;
            ChecklistData currentRow = (ChecklistData)this.get(list, index);
            StringBuffer rowString = new StringBuffer();
            // If it is checked draw the String prefixed with a checked box,
            // prefix an unchecked box if it is not.
            if (currentRow.isChecked()) {
                rowString.append(Characters.BALLOT_BOX_WITH_CHECK);
            } else {
                rowString.append(Characters.BALLOT_BOX);
            }
            // Append a couple spaces and the row's text.
            rowString.append(Characters.SPACE);
            rowString.append(Characters.SPACE);
            rowString.append(currentRow.getStringVal());
            // Draw the text.
            g.drawText(rowString.toString(), 0, y, 0, w);
        }
        public Object get(ListField list, int index) {
            return _listElements.elementAt(index);
        }
        public int indexOfList(ListField list, String prefix, int string) {
            return _listElements.indexOf(prefix, string);
        }
        public int getPreferredWidth(ListField list) {
            return Display.getWidth();
        }
    }
    private class ChecklistData {
        private String _stringVal;
        private boolean _checked;
        /*
         * ChecklistData() { _stringVal = ""; _checked = false; }
         */
        ChecklistData(String stringVal, boolean checked) {
            _stringVal = stringVal;
            _checked = checked;
        }
        // Get/set methods.
        private String getStringVal() {
            return _stringVal;
        }
        private boolean isChecked() {
            return _checked;
        }
        /*
         * private void setStringVal(String stringVal) { _stringVal = stringVal;
         * }
         * 
         * private void setChecked(boolean checked) { _checked = checked; }
         */
        // Toggle the checked status.
        private void toggleChecked() {
            _checked = !_checked;
        }
    }
    /* (non-Javadoc)
     * @see net.rim.device.api.ui.container.MainScreen#makeMenu(net.rim.device.api.ui.component.Menu, int)
     */
    protected void makeMenu(Menu menu, int instance) {
        // TODO Auto-generated method stub
        Field focus = UiApplication.getUiApplication().getActiveScreen().getLeafFieldWithFocus();
        if(focus == _checkList) 
        {
            //The _checkList ListField instance has focus.
            //Add the _toggleItem MenuItem.
            menu.add(_toggleItem);
        }
        super.makeMenu(menu, instance);
    }
}