Suhail Ahmad
Suhail Ahmad

Reputation: 9

BlackBerry - How to add clickEvent (setChangeListener) to ListField in BlackBerry?

I'm using ListField in Blackberry and unable to apply the row.setChangeListener. Can anybody please help me? Here is my code,

Friendship objFriendship = new Friendship();
  friends = objFriendship.FetchFriends(AATTGlobals.CURRENT_USER.getUserID()); 
  rows = new Vector();
  for (int x = 0; x < friends.length; x++) {
  String UserName = friends[x].getUserName();
  ProfilePicture = MISC.FetchUserProfilePicture(friends[x].getProfilePicturePath());
  String Location = friends[x].getLocation();
  TableRowManager row = new TableRowManager();
  row.add(new BitmapField(ProfilePicture));
  LabelField task = new LabelField(UserName,DrawStyle.ELLIPSIS)
   {
        protected void paint(Graphics graphics) {
         graphics.setColor(0x0099CCFF);
         super.paint(graphics);
        }
    };
  task.setFont(Font.getDefault().derive(Font.BOLD));
  row.add(task);
  row.add(new LabelField(Location,DrawStyle.ELLIPSIS)
   {
    protected void paint(Graphics graphics) {
     graphics.setColor(0x0099CCFF);
     super.paint(graphics);
    } 
  }
  );
row.setChangeListener( new FieldChangeListener() {
    public void fieldChanged(Field field, int context) {
        Dialog.alert("Row Clicked #");
    }
});

No any error message but setChangeListener doesn't fire, here is TableRowManager

Private class TableRowManager extends Manager {
    public TableRowManager() {
    super(0);
}
public void drawRow(Graphics g, int x, int y, int width, int height) {
   layout(width, height);
   setPosition(x, y);
   g.pushRegion(getExtent());
   subpaint(g);
   g.setColor(0x0099CCFF);
   g.drawLine(0, 0, getPreferredWidth(), 0);
   g.popContext();
  }
  protected void sublayout(int width, int height) {
   int fontHeight = Font.getDefault().getHeight();
   int preferredWidth = getPreferredWidth();
   Field field = getField(0);
   layoutChild(field, 44, 44);
   setPositionChild(field, 10, getRowHeight() / 4);
   field = getField(1);
   layoutChild(field, preferredWidth - 16, fontHeight + 1);
   setPositionChild(field, 70, getRowHeight() / 5);
   field = getField(2);
   layoutChild(field, field.getPreferredWidth(), fontHeight + 1);
   setPositionChild(field, 70, (getRowHeight() / 2) + 5);
   setExtent(preferredWidth, getPreferredHeight());
  }
  public int getPreferredWidth() {
   return Graphics.getScreenWidth();
  }
  public int getPreferredHeight() {
   return getRowHeight();
  }
 }

Upvotes: 1

Views: 1288

Answers (2)

SelfReflection
SelfReflection

Reputation: 121

I noticed, fieldChangeLister/FieldChanged isnt getting called with ListField UI [as it works for button and labels.]So I think FieldChanged is not supported with Listfield

In navigationClick/TouchEvent (), write the action you are writing in FieldChange method.

Upvotes: 0

Govindarao Kondala
Govindarao Kondala

Reputation: 2862

in tableRowManager add this

    //for non touch
    protected boolean navigationClick(int status, int time) {
                    fieldChangeNotify(0);
                    return true;
                }
//for  touch
                protected boolean touchEvent(TouchEvent message) {
                    if (TouchEvent.CLICK == message.getEvent()) {
                        FieldChangeListener listener = getChangeListener();
                        if (null != listener)
                            listener.fieldChanged(this, 1);
                    }

                    return super.touchEvent(message);
                }

try this let me know is it working or not.

Upvotes: 1

Related Questions