How to set different row height in listfield with implementing listfieldcallback()?
===

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.