我想在我的應用程序中實現像這樣的東西: 也就是說,每個圖像包含一個心臟圖標。我想要處理對心臟Click事件和我有以下代碼黑莓中的圖像自定義列表
list.setEmptyString("No Image Available", DrawStyle.HCENTER);
list.setRowHeight(Display.getHeight() - 100);
list.setSize(data.size());
if (listVManager != null && listVManager.getFieldCount() > 0) {
listVManager.deleteAll();
}
list.setCallback(new ListFieldCallback() {
public void drawListRow(ListField list, Graphics graphics,
int index, int y, int w) {
int yPos = y + list.getRowHeight() - 1;
graphics.setColor(0x434343);
graphics.fillRect(0, y, w, list.getRowHeight());
if (logoThumbnailImage != null
&& logoThumbnailImage.length > index
&& logoThumbnailImage[index] != null) {
EncodedImage img = logoThumbnailImage[index];
graphics.drawImage(0, y + 10, Display.getWidth(),
Display.getHeight() - 100, img, 0, 0, 0);
graphics.drawText("Hello", 10,
Display.getHeight() - 150);
graphics.drawImage(Display.getWidth() - 70,
Display.getHeight() - 150 + 300,
heart.getWidth(), heart.getHeight(), heart,
0, 0, 0);
} else {
graphics.drawImage(
15,
y + 10,
Display.getWidth(),
Display.getHeight() - 100,
sizeImage(iconImage, Display.getWidth(),
Display.getHeight() - 100), 0, 0, 0);
}
graphics.drawText("Hello", 10,
Display.getHeight() - 150);
graphics.drawLine(0, yPos, w, yPos);
}
public Object get(ListField listField, int index) {
return null;
}
public int getPreferredWidth(ListField listField) {
return Display.getWidth();
}
public int indexOfList(ListField listField, String prefix,
int start) {
return 0;
}
});
listVManager.add(list);
loadImages = new LoadImages(80, 80);
loadImages.start();
}
});
這裏負荷的形象是線程的背景下,載入圖像,並將它們存儲在logoThumbnailImage陣列,並從那裏無效列表時它加載圖像。
負載圖像線程類:
private class LoadImages extends Thread {
int widthL;
int heightL;
LoadImages(int width, int height) {
this.widthL = width;
this.heightL = height;
}
public void run() {
logoThumbnailImage=new EncodedImage[numberOfItem];
if (object != null) {
for (int i = 0; i < numberOfItem; i++) {
try {
String text=object[i].getJSONArray("UrlArray").getString(0).toString();
EncodedImage encodedImg = JPEGEncodedImage.encode(connectServerForImage(text), quality); //connectserverForImage load Images from server
logoThumbnailImage[i] = sizeImage(encodedImg, Display.getWidth(), Display.getHeight()-100);
list.invalidate();
} catch (Exception e)
{
e.printStackTrace();
}
}
} else {
UiApplication.getUiApplication().invokeLater(new Runnable() {
public void run() {
Dialog.alert("No Data Found");
}
});
}
}
}
應用程序運行順利,但我得到了以下的輸出:
我有以下問題 1.心臟和說明顯示只一個列表行。任何人都可以告訴我我錯過了什麼嗎? 2.如何執行心臟上的點擊事件
你能告訴我如何在心臟圖標上執行點擊事件嗎 –
如果你可以點擊該行的任何地方,這很簡單,可以覆蓋navigationClick()。如果點擊心臟不同於該行其他位置的點擊,則不支持ListField。一個ListField期望焦點和點擊針對該行,而不是該行的特定部分。有編碼的方法,但它們並不漂亮。所以如果你只有幾行(比如少於30),這是必不可少的,那就用另一種方法。爲每一行創建一個HorizontalFieldManager,並將這些行添加到VerticalFieldManager。或者使用GridFieldManager或TableLayoutManager。 –
我發現@NATE編寫的代碼實現了相同的功能,但在這種情況下,圖像是靜態的,但在我的情況下,圖像正在下載(並且圖像可能很多)形式的Web服務。我可以實現相同的代碼嗎?這裏是相同的nate實現的鏈接http://stackoverflow.com/questions/11483128/custom-list-field-click-event/11486480#11486480 –