This is my latest Custom_Listfield
class.
public class Custom_ListField extends ListField {
private String[] title, category, date, imagepath;
private int[] newsid, catsid;
private List_News newslist;
private Bitmap imagebitmap[], localimage = Config_GlobalFunction
.Bitmap("image_base.png");
private BrowserField webpage;
private boolean islatest;
private int highest = 0;
private Vector content = null;
private ListCallback callback = null;
private int currentPosition = 0;
public Custom_ListField(Vector content, boolean islatest) {
this.content = content;
this.islatest = islatest;
newsid = new int[content.size()];
title = new String[content.size()];
category = new String[content.size()];
date = new String[content.size()];
imagepath = new String[content.size()];
catsid = new int[content.size()];
imagebitmap = new Bitmap[content.size()];
for (int i = 0; i < content.size(); i++) {
newslist = (List_News) content.elementAt(i);
newsid[i] = newslist.getID();
title[i] = newslist.getNtitle();
category[i] = newslist.getNewCatName();
date[i] = newslist.getNArticalD();
imagepath[i] = newslist.getImagePath();
catsid[i] = newslist.getCatID();
if (!imagepath[i].toString().equals("no picture")) {
imagebitmap[i] = Util_ImageLoader.loadImage(imagepath[i]);
if (imagebitmap[i].getHeight() > highest)
highest = imagebitmap[i].getHeight();
} else {
imagebitmap[i] = localimage;
}
catsid[i] = newslist.getCatID();
if (catsid[0] != 9)
this.setRowHeight( localimage.getHeight() + 10);
else
this.setRowHeight( highest + 10);
}
initCallbackListening();
}
private void initCallbackListening() {
callback = new ListCallback();
this.setCallback(callback);
}
private class ListCallback implements ListFieldCallback {
public ListCallback() {
setBackground(Config_GlobalFunction
.loadbackground("background.png"));
}
public void drawListRow(ListField listField, Graphics graphics,
int index, int y, int width) {
currentPosition = index;
graphics.setColor(Color.WHITE);
if (catsid[0] != 9) {
graphics.drawBitmap(
Display.getWidth() - localimage.getWidth() - 5,
y
+ ((listField.getRowHeight() - localimage
.getHeight()) / 2),
localimage.getWidth(), localimage.getHeight(),
imagebitmap[index], 0, 0);
} else {
graphics.drawBitmap(
Display.getWidth() - imagebitmap[index].getWidth() - 5,
y
+ (listField.getRowHeight() - imagebitmap[index]
.getHeight()) / 2,
imagebitmap[index].getWidth(),
imagebitmap[index].getHeight(), imagebitmap[index], 0,
0);
}
graphics.drawRect(0, y, width, listField.getRowHeight());
graphics.setColor(Color.BLACK);
Vector text = Config_GlobalFunction.wrap(title[index],
Display.getWidth() - imagebitmap[index].getWidth() - 10);
for (int i = 0; i < text.size(); i++) {
int liney = y + (i * Font.getDefault().getHeight());
graphics.drawText((String) text.elementAt(i), 5, liney + 3,
DrawStyle.TOP | DrawStyle.LEFT | DrawStyle.ELLIPSIS,
Display.getWidth() - imagebitmap[index].getWidth() - 10);
}
graphics.setColor(Color.GRAY);
graphics.drawText(date[index], 5, y + Font.getDefault().getHeight()
* text.size());
if (islatest) {
graphics.setColor(Color.RED);
graphics.drawText(category[index], Font.getDefault()
.getAdvance(date[index]) + 15, y
+ Font.getDefault().getHeight() * text.size());
}
}
public Object get(ListField listField, int index) {
return content.elementAt(index);
}
public int getPreferredWidth(ListField listField) {
return Display.getWidth();
}
public int indexOfList(ListField listField, String prefix, int start) {
return content.indexOf(prefix, start);
}
}
public int getCurrentPosition() {
return currentPosition;
}
protected boolean navigationClick(int status, int time) {
final int index = getCurrentPosition();
Main.getUiApplication().pushScreen(new Custom_LoadingScreen(1));
Main.getUiApplication().invokeLater(new Runnable() {
public void run() {
if (catsid[index] == 9) {
if (Config_GlobalFunction.isConnected()) {
webpage = new BrowserField();
MainScreen aboutus = new Menu_Aboutus();
aboutus.add(webpage);
Main.getUiApplication().pushScreen(aboutus);
webpage.requestContent("http://www.orientaldaily.com.my/index.php?option=com_k2&view=item&id="
+ newsid[index] + ":&Itemid=223");
} else
Config_GlobalFunction.Message(
Config_GlobalFunction.nowifi, 1);
} else
Main.getUiApplication().pushScreen(
new Main_NewsDetail(newsid[index]));
}
}, 1 * 1000, false);
return true;
}
}
I tried set with this.setRowHeight(i, highest + 10);
. It return wrong size of height and still every row same height.
I believe there was some tricky part and blackberry does not support for set different row height.