在黑莓风暴和火炬的listfield

时间:2011-10-29 13:54:47

标签: blackberry blackberry-storm

我有listfield,其中包含多行。 当我在黑莓火炬中使用它时工作正常(我可以滚动列表字段并可以选择(单击)任何行)。 但同样的应用程序,当我用于黑莓风暴9500我无法滚动,因为一旦我尝试滚动行被选中(点击)。请告诉我它发生的原因或使用列表字段的方式风暴

谢谢

我的lisfield课程是

import net.rim.device.api.system.Bitmap;
import net.rim.device.api.system.Display;
import net.rim.device.api.ui.Color;
import net.rim.device.api.ui.Graphics;
import net.rim.device.api.ui.UiApplication;
import net.rim.device.api.ui.XYRect;
import net.rim.device.api.ui.component.Dialog;
import net.rim.device.api.ui.component.ListField;
import net.rim.device.api.ui.component.ListFieldCallback;

  public class SpeakersList implements ListFieldCallback
{
    private String[] products;
    private int rgb=Color.BLACK;
    Bitmap arraow;
    Bitmap placeholder;
    Bitmap holder[];
    int i=0;
    ImageLoad load;
    public Bitmap _bmap;
    ListField listField;
    TaskWorker taskWorker;
public SpeakersList(String[] products)
{
    this.products=products;
    arraow= Bitmap.getBitmapResource("arrow.png");
    DynamicImages images=new DynamicImages();
    placeholder=Bitmap.getBitmapResource(images.defaultimage);
    holder=new Bitmap[QandAScreen.imglist.length];
    taskWorker = new TaskWorker();
    taskWorker.addTask(new ImageDowload());
}

public void drawListRow(ListField listField, Graphics graphics, int index,
        int y, int width)
{
    this.listField=listField;
    final String text=(String) get(listField, index);
    if (graphics.isDrawingStyleSet(Graphics.DRAWSTYLE_FOCUS))
    {
    if(holder[index]==null)
    {
    holder[index]=placeholder;
    }
    graphics.setColor(0xC0C0C0);
    graphics.fillRect(0,y+0,480,59);
    graphics.setColor(rgb);
    graphics.setFont(Utility.getBigFont(15));
    graphics.drawBitmap(3,y+7,placeholder.getWidth(), placeholder.getHeight(),holder[index], 0, 0);
    graphics.drawText(text,70,y+20);  
    if(Display.getWidth()==480){
    graphics.drawBitmap(460,y+20,arraow.getWidth(), arraow.getHeight(),arraow, 0, 0);
    }
    else if(Display.getWidth()==360)
    {
        graphics.drawBitmap(330,y+20,arraow.getWidth(), arraow.getHeight(),arraow, 0, 0);
    }
    else
    {
    graphics.drawBitmap(300,y+20,arraow.getWidth(), arraow.getHeight(),arraow, 0, 0);
    }
    graphics.drawLine(0, y+59, Display.getWidth(), y+59);
    }
    else
    {
        if(holder[index]==null)
        {
        holder[index]=placeholder;
        }
        graphics.setColor(rgb);
        graphics.setFont(Utility.getBigFont(15));
        graphics.drawBitmap(3,y+7,placeholder.getWidth(), placeholder.getHeight(),holder[index], 0, 0);
        graphics.drawText(text,70,y+20);  
        if(Display.getWidth()==480){
            graphics.drawBitmap(460,y+20,arraow.getWidth(), arraow.getHeight(),arraow, 0, 0);
            }
        else if(Display.getWidth()==360)
        {
            graphics.drawBitmap(330,y+20,arraow.getWidth(), arraow.getHeight(),arraow, 0, 0);
        }
            else
            {
            graphics.drawBitmap(300,y+20,arraow.getWidth(), arraow.getHeight(),arraow, 0, 0);
            }
        graphics.drawLine(0, y+59, Display.getWidth(), y+59);
    }
}
public Object get(ListField listField, int index)
{
    return products[index];
}

public int getPreferredWidth(ListField listField)
{
    return Display.getWidth()+10;
}
public int indexOfList(ListField listField, String prefix, int start)
{
    return -1;
}

class ImageDowload extends Task
{
    void doTask()
    {


   for(;i<QandAScreen.imglist.length;i++)
   {
        String imgpath=QandAScreen.imglist[i];
         if(imgpath==null || imgpath.length()==0)
         {
          continue;
         }
        load=new  ImageLoad(QandAScreen.imglist[i]+Const.getExtra());
        if(load.getData()!=null)
        {
            UiApplication.getUiApplication().invokeLater(new Runnable() 
            {
                public void run()
                {

                    _bmap=load.getBitmap(40,40);
                    listField.invalidate(i-1);
                    holder[i-1]=_bmap;


               }
            });



        }
   }

    }
}
}

1 个答案:

答案 0 :(得分:3)

您是使用模拟器还是真实设备进行测试?如果我的记忆服务,9500 Storm使用SureClick -display,其中显示器实际上有一个小的微动开关,因此它可以检测触摸和点击(按下显示屏)作为单独的动作。在模拟器中,您需要使用鼠标右键来模拟触摸,然后左键来模拟点击(或者是相反的方式?)。 Torch(9800)还没有得到SureClick-thingamabob,所以列表可以在模拟器中用鼠标左键和左键滚动(虽然它们确实有一些区别,其他作为触摸工作,其他发送连续'点击'到屏幕或其他东西)。