【问题标题】:listfield in blackberry storm and torch黑莓风暴和火炬中的列表字段
【发布时间】:2011-10-29 22:06:37
【问题描述】:

我有包含多行的列表字段。 当我在黑莓手电筒中使用时它工作正常(我可以滚动列表字段并可以选择(单击)任何行)。 但是当我用于黑莓风暴 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;


               }
            });



        }
   }

    }
}
}

【问题讨论】:

    标签: blackberry blackberry-storm


    【解决方案1】:

    您是使用模拟器还是真实设备进行测试?如果我没记错的话,9500 Storm 使用 SureClick 显示屏,显示屏下方实际上有一个小微型开关,因此它可以将触摸和点击(按下显示屏)检测为单独的操作。在模拟器中,您需要使用鼠标右键来模拟触摸并使用鼠标左键来模拟单击(或者相反?)。 Torch (9800) 没有 SureClick-thingamabob,因此可以在模拟器中使用鼠标左右键滚动列表(尽管它们确实有一些区别,其他用作触摸和其他发送连续“点击”到屏幕什么的)。

    【讨论】:

    • 感谢您的快速回复。在模拟器 9550 中测试
    • 再次感谢您。当我使用鼠标右键滚动时,它的工作原理。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多