Как изменить цвет фона строки в ListField после нажатия кнопки навигации?

Я новичок в BB dev. Я создаю CustomListField, и когда я нажимаю на строку, цвет фона этой строки должен измениться, и должен отображаться новый экран (это сделано!).

Может ли кто-нибудь помочь мне сделать это? Спасибо

Ниже приведен код:

protected boolean navigationClick(int status, int time)
       {Field field = this.getLeafFieldWithFocus();

       if(field instanceof ListField)
       {
         // listValues is String[] where you store your list elements.
         // listField is the ListField instance you are using 
           UiApplication.getUiApplication().pushScreen(new ReadMsgScreen());

           int index= getIndex();
           if(index== this.getSelectedIndex())
           {
               **// I think the  code to change the row's background color must be set here!**

           }

          return true;
        }

       return super.navigationClick(status, time);
   }

person Manel    schedule 11.08.2011    source источник


Ответы (3)


используйте это, это определенно сработает...

int tmpcolor = graphics.getColor();
graphics.setColor(Color.CYAN);
graphics.fillRect(0, y, width, getRowHeight());
graphics.setColor(tmpcolor);

Благодарность...

person ms.    schedule 11.08.2011

onerride метод paint() в Blackberry, как показано в приведенном ниже коде.

_specialNumbers = new LabelField(Constants.SPECIAL_NUMBERS,LabelField.USE_ALL_WIDTH) {
            protected void paintBackground(Graphics arg0) {
                int color = arg0.getBackgroundColor();
                arg0.setBackgroundColor(Color.LIGHTGREY);
                arg0.clear();
                arg0.setBackgroundColor(color);
            }
        };
person ms.    schedule 11.08.2011
comment
Мне нужно вызвать метод paint() для строки ListField. int index= getIndex(); if(index== this.getSelectedIndex()) { **// I think the code to change the row's background color must be set here!** } - person Manel; 11.08.2011
comment
Я пытался переопределить метод paint(): TableRowManager ele_row = new TableRowManager() { protected void paint(Graphics graphics) { invalidate(); graphics.setBackgroundColor(Color.RED); super.paint(graphics); } }; но он все равно не работает!! кто-нибудь знает, как изменить цвет фона строки в поле списка, пожалуйста? - person Manel; 17.08.2011
comment
Решение этой проблемы состоит в том, чтобы добавить g.setBackgroundColor(0x33CCFF); g.clear(); в метод drawRow(Graphics g, int x, int y, int width, int height) непосредственно перед subpaint(g); Это метод отверстия: public void drawRow(Graphics g, int x, int y, int width, int height) { layout(width, height);setPosition(x, y); g.pushRegion(getExtent());g.setBackgroundColor(0x33CCFF);g.clear(); g.setColor(Color.BLACK);subpaint(g); g.drawLine(0, 0, getPreferredWidth(), 0);g.popContext();} - person Manel; 25.08.2011
comment
Не могли бы вы указать, хотите ли вы изменить цвет в событии OnFocus или вы хотите, чтобы он изменился в событии onClick? - person Rajkiran; 21.05.2012

В drawListRow() метода ListFieldCallback для вашего CustomListField рисует выбранную линию по-другому и вызывает Переход для отображения другой Экран медленно.

person Alexander Farber    schedule 12.08.2011