2010-07-16 7 views
1

Je suis nouveau au développement Blackberry.Mon application contient cinq éléments de la liste ayant des chaînes chaque article.Ma exigence est quand une cellule est sélectionnée, il devrait agrandir et d'autres éléments ajuster automatiquement l'espace entre eux. J'ai pris deux types d'images pour les éléments de la liste, un pour la vue générale et l'autre pour l'affichage de l'élément sélectionné lorsque l'utilisateur a cliqué sur celui-ci qui est plus haut que le précédent.Comment personnaliser les éléments listfield?

Mais le problème est lorsque j'ai sélectionné un élément qu'il agrandit et chevauche sur l'élément suivant et n'affiche pas l'élément complet et ne pas ajuster l'espace entre eux. quelqu'un peut-il me donner la solution pour cela. J'utilise le code suivant ....

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

drawListRow public void (ListField Arg0, graphiques, index int, int y, int largeur) {

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)); 
    } 
} 

Répondre

2

Liste des champs sur BlackBerry supposons que toutes les lignes ont la même hauteur.

Pour obtenir le type d'effet que vous voulez, utilisez un tas de champs sélectionnables dans un VerticalFieldManager, vous obtiendrez un effet similaire à un champ ListField. Assurez-vous que vos éléments peuvent être mis au point, et appelez le updateLayout chaque fois qu'ils gagnent ou perdent le focus, puis dans votre méthode layout, définissez la hauteur du champ selon qu'il est ou non focalisé. Quelque chose comme le contour suivant:

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 
     } 
    } 

}