当前位置: 代码迷 >> BlackBerry >> 定做含有CheckBox的ListField (BlackBerry)
  详细解决方案

定做含有CheckBox的ListField (BlackBerry)

热度:7507   发布时间:2013-02-26 00:00:00.0
定制含有CheckBox的ListField (BlackBerry)

版权所有,欢迎转载,转载请注明 : SinFrancis ?http://mdev.cc

?

BB中是没办法将Checkbox与ListField结合在一起的,不过我们可以自己写个,但也不是真的Checkbox,只是在功能上实现了而已,外观上看着像Checkbox。关键就是在使用 :?

选中状态字符 : Characters.BALLOT_BOX_WITH_CHECK?

非选中字符 :Characters.BALLOT_BOX

?

请看代码:关键地方?drawListRow()

当点击每个Item的时候,判断此行的状态,然后进行选中或者取消,将Characters.BALLOT_BOX_WITH_CHECK?

或者Characters.BALLOT_BOX画上去就Ok 了。

?

?

?

/* * CheckBoxListFieldSample.java * * Research In Motion, 2003-2005 * Confidential and proprietary. */package cc.mdev.seek;import net.rim.device.api.ui.*;import net.rim.device.api.ui.component.*;import net.rim.device.api.ui.container.*;import net.rim.device.api.system.*;import java.util.Vector;class CheckboxListField extends UiApplication implements ListFieldCallback{    private static final String[] _elements = {"First element", "Second element", "Third element", "Fourth element", "Fifth element"};    private Vector _listData = new Vector();    private ListField _checkList;    private MenuItem _toggleItem;        //A class to hold the Strings in the CheckBox and it's checkbox state (checked or unchecked).    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;        }    }      /*  public static void main(String args[])    {        CheckboxListField theApp = new CheckboxListField();        theApp.enterEventDispatcher();    }*/        CheckboxListField()     {                //The menu item added to the screen when the _checkList field has focus.        //This menu item toggles the checked/unchecked status of the selected row.        _toggleItem = new MenuItem("Change Option", 200, 10)         {            public void run()            {                //Get the index of the selected row.                int index = _checkList.getSelectedIndex();                                //Get the ChecklistData for this row.                ChecklistData data = (ChecklistData)_listData.elementAt(index);                                //Toggle its status.                data.toggleChecked();                                //Update the Vector with the new ChecklistData.                _listData.setElementAt(data, index);                                //Invalidate the modified row of the ListField.                _checkList.invalidate(index);            }        };                MainScreen myScreen = new MainScreen()        {            //Override the makeMenu method so we can add a custom menu item            //if the checkbox ListField has focus.            protected void makeMenu(Menu menu, int instance)            {                Field focus = UiApplication.getUiApplication().getActiveScreen().getLeafFieldWithFocus();                if(focus == _checkList)                 {                    //The _checkList ListField instance has focus.                    //Add the _toggleItem MenuItem.                    menu.add(_toggleItem);                }                                //Create the default menu.                super.makeMenu(menu, instance);            }                    };                //Add a title to the screen.        myScreen.setTitle(new LabelField("Checkbox ListField sample"));        _checkList = new ListField()        {            //Allow the space bar to toggle the status of the selected row.            protected boolean keyChar(char key, int status, int time)            {                boolean retVal = false;                                //If the spacebar was pressed...                if (key == Characters.SPACE)                {                    //Get the index of the selected row.                    int index = getSelectedIndex();                                        //Get the ChecklistData for this row.                    ChecklistData data = (ChecklistData)_listData.elementAt(index);                                        //Toggle its status.                    data.toggleChecked();                                        //Update the Vector with the new ChecklistData.                    _listData.setElementAt(data, index);                                        //Invalidate the modified row of the ListField.                    invalidate(index);                                        //Consume this keyChar (key pressed).                    retVal = true;                }                return retVal;            }        };                //Set the ListFieldCallback        _checkList.setCallback(this);                int elementLength = _elements.length;                //Populate the ListField & Vector with data.        for(int count = 0; count < elementLength; ++count)        {            //Even rows will be checked, odd will be unchecked.            if (count % 2 == 0)            {                _listData.addElement(new ChecklistData(_elements[count], true));            }            else            {                _listData.addElement(new ChecklistData(_elements[count], false));            }            _checkList.insert(count);        }        //Add the ListField to the screen.        myScreen.add(_checkList);                //Push the screen onto the display stack.        pushScreen(myScreen);        }        //ListFieldCallback impelmentation.        //Draws the list row.    public void drawListRow(ListField list, Graphics graphics, int index, int y, int w)     {        //Get the ChecklistData for the current row.        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.        graphics.drawText(rowString.toString(), 0, y, 0, w);    }        //Returns the object at the specified index.    public Object get(ListField list, int index)     {        return _listData.elementAt(index);    }        //Returns the first occurence of the given String, bbeginning the search at index,     //and testing for equality using the equals method.    public int indexOfList(ListField list, String p, int s)     {        //return listElements.getSelectedIndex();        return _listData.indexOf(p, s);    }        //Returns the screen width so the list uses the entire screen width.    public int getPreferredWidth(ListField list)     {        return Graphics.getScreenWidth();    }} 
?

?

  相关解决方案