Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Blackberry中带有图像的自定义列表_Blackberry_Listfield - Fatal编程技术网

Blackberry中带有图像的自定义列表

Blackberry中带有图像的自定义列表,blackberry,listfield,Blackberry,Listfield,我想在我的应用程序中实现如下内容: 也就是说,每个图像包含一个心脏图标。我想处理心脏点击的点击事件,为此我有以下代码 list.setEmptyString(“无可用图像”,DrawStyle.HCENTER); list.setRowHeight(Display.getHeight()-100); list.setSize(data.size()); if(listVManager!=null&&listVManager.getFieldCount()>0){ listVManager.del

我想在我的应用程序中实现如下内容: 也就是说,每个图像包含一个心脏图标。我想处理心脏点击的点击事件,为此我有以下代码

list.setEmptyString(“无可用图像”,DrawStyle.HCENTER);
list.setRowHeight(Display.getHeight()-100);
list.setSize(data.size());
if(listVManager!=null&&listVManager.getFieldCount()>0){
listVManager.deleteAll();
}
setCallback(新的ListFieldCallback(){
公共无效drawListRow(列表字段列表、图形、,
整数索引,整数y,整数w){
int yPos=y+list.getRowHeight()-1;
graphics.setColor(0x434343);
graphics.fillRect(0,y,w,list.getRowHeight());
如果(logoThumbnailImage!=空
&&logoThumbnailImage.length>索引
&&logoThumbnailImage[索引]!=null){
EncodedImage img=logoThumbnailImage[索引];
graphics.drawImage(0,y+10,Display.getWidth(),
Display.getHeight()-100,img,0,0,0);
graphics.drawText(“你好”,10,
Display.getHeight()-150);
graphics.drawImage(Display.getWidth()-70,
Display.getHeight()-150+300,
heart.getWidth(),heart.getHeight(),heart,
0, 0, 0);
}否则{
绘图图像(
15,
y+10,
Display.getWidth(),
Display.getHeight()-100,
sizeImage(iconImage,Display.getWidth(),
Display.getHeight()-100)、0、0、0);
}
graphics.drawText(“你好”,10,
Display.getHeight()-150);
图形.绘制线(0,yPos,w,yPos);
}
公共对象get(ListField ListField,int index){
返回null;
}
public int getPreferredWidth(ListField ListField){
返回Display.getWidth();
}
public int indexOfList(ListField ListField,字符串前缀,
整数(开始){
返回0;
}
});
listVManager.add(列表);
loadImages=新的loadImages(80,80);
loadImages.start();
}
});
这里load image是一个线程,它在后台加载图像并将它们存储在logoThumbnailImage数组中,并在加载图像时使列表失效

加载图像线程类:

私有类LoadImages扩展线程{
int-widthL;
国际高地;
加载图像(整数宽度、整数高度){
此值为1.widthL=宽度;
this.heightL=高度;
}
公开募捐{
logoThumbnailImage=新编码图像[numberOfItem];
if(对象!=null){
对于(inti=0;i
应用程序运行平稳,但我得到以下输出:

我有以下问题 1.心脏和描述仅显示在一个列表行上。谁能告诉我我错过了什么?
2.如何在heart上执行click事件

仅简要介绍了一下,问题似乎是您在某些地方忽略了传递给drawListRow()方法的“y”位置:

实际上,您应该用来绘制当前行(使用int-index标识的行)的“画布”是以矩形为边界的 (0,y,w,list.getRowHeight()

实际上,您可以在属于ListField的范围内的任何位置进行绘制,即可以绘制到的区域实际上是矩形 (0,0,list.getWidth(),list.getHeight()。 你可以这样做,但你不应该。如果你走到行的矩形外,你将在另一行上绘画

在您的情况下,在所选行之外进行绘制正是您的代码所做的。您可以这样做:

                graphics.drawText("Hello", 10,
                        Display.getHeight() - 150);
这实际上将被放置在列表字段上,从左到右10像素,从顶部向下显示.getHeight()-150。无论绘制的是哪一行,它都将定位在ListField中的这一点上。因此,每一行都会将Hello文本放在相同的位置

因此,在编写drawListRow()代码时,请确保偏移所有位置,使其保持在要绘制的行的边界内。正在绘制的区域的原点为(0,y),因此使用y偏移所有垂直位置。不要使用Display.getHeight(),使用list.getRowHeight()获取可以绘制的高度(从y开始),不要使用Display.getWidth(),使用传入的w变量获取宽度t
                graphics.drawText("Hello", 10,
                        Display.getHeight() - 150);