2010-07-16 2 views
1

Я новичок в разработке Blackberry. Мое приложение содержит пять элементов списка, имеющих строки каждого элемента. Мое требование - когда одна ячейка выбрана, она должна увеличиваться, а другие элементы автоматически настраивают пространство между ними. Я взял два типа изображений для элементов списка один для общего вида и один для отображения выбранного элемента, когда пользователь нажал на него, который имеет большую высоту, чем предыдущий.Как настроить элементы списка?

Но проблема в том, что когда я выбрал один элемент, он увеличивается и накладывается на следующий элемент и не отображает полный элемент и не корректирует пространство между ними. может кто-нибудь дать мне решение для этого. Я использую следующий фрагмент кода ....

_listField.setCallback(this); 
    _listField.setRowHeight(45); 
    _listField.setChangeListener(this); 

общественного недействительными drawListRow (ListField arg0, Графика, Int индекса, INT у, внутр ширина) {

if (listFieldIndex != index) { 

     graphics.drawBitmap(0, y, listBkgrnd.getWidth(), listBkgrnd 
       .getHeight(), listBkgrnd, 0, 0); 

     graphics.setColor(0xAA0000); 
     graphics.setFont(this.getFont().derive(Font.BOLD, 17)); 
     graphics.drawText(((Station) _stationList.elementAt(index)) 
       .getStationName(), 15, y + 15, 0, 
       (listBkgrnd.getWidth() - 70)); 

     graphics.setColor(0x770000); 
     graphics.setFont(this.getFont().derive(Font.PLAIN, 13)); 

     // graphics.drawText(
     // ((Station) _stationList.elementAt(index)).getCT(), 15, 
     // y + 40, 0, (listBkgrnd.getWidth() - 65)); 

    } else { 

     graphics.drawBitmap(0, y, playBkgrnd.getWidth(), playBkgrnd 
       .getHeight(), playBkgrnd, 0, 0); 

     graphics.setColor(0xAA0000); 
     graphics.setFont(this.getFont().derive(Font.BOLD, 17)); 
     graphics.drawText(((Station) _stationList.elementAt(index)) 
       .getStationName(), 15, y + 15, 0, 
       (playBkgrnd.getWidth() - 70)); 

     graphics.setColor(0x770000); 
     graphics.setFont(this.getFont().derive(Font.PLAIN, 13)); 

     graphics.drawText(
        s.getCT(), 15, 
        y + 40, 0, (playBkgrnd.getWidth() - 65)); 
    } 
} 

ответ

2

Список полей на BlackBerry предположим, что все строки имеют одинаковую высоту.

Чтобы получить тот эффект, который вы хотите, используйте кучу выбираемых полей в VerticalFieldManager, вы получите аналогичный эффект для ListField. Обязательно сделайте свои объекты ориентируемыми и вызовите updateLayout всякий раз, когда они получают или теряют фокус, затем в вашем методе layout задайте высоту поля в зависимости от того, сосредоточена ли она. Что-то наподобие следующего наброска:

public class CustomListFieldItem extends Field { 

    public boolean isFocusable() { 
     return true; 
    } 

    protected void onFocus(int direction) { 
     super.onFocus(direction); 
     updateLayout(); 
    } 

    protected void onUnfocus() { 
     super.onUnfocus(); 
     updateLayout(); 
    } 

    protected void layout(int width, int height) { 
     if (isFocus()) { 
      setExtent(width, playBkgrnd.getHeight()); 
     } 
     else { 
      setExtent(width, listBkgrnd.getHeight()); 
     } 

    } 

    protected void paint(Graphics graphics) { 
     if (isFocus()) { 
      // draw selected item 
     } 
     else { 
      // draw unselected item 
     } 
    } 

} 
Смежные вопросы