응용 프로그램에 다음과 같이 구현하고 싶습니다. 즉, 각 이미지에 하트 아이콘 하나가 포함되어 있습니다. 나는 마음 클릭에 클릭 이벤트를 처리하는 원하고 그것을 위해 나는이미지가있는 블랙 베리의 사용자 지정 목록
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에 의해 작성된 코드를 찾았지만이 경우 이미지는 정적이지만 내 경우에는 이미지가 다운로드되고 이미지가 많이있을 수 있습니다. 양식 웹 서비스. 동일한 코드를 구현할 수 있습니까? 다음은 동일한 네이트 구현을위한 링크입니다. http://stackoverflow.com/questions/11483128/custom-list-field-click-event/11486480#11486480 –