Blackberry:VerticalFieldManager子元素未接收焦点

时间:2011-08-12 16:28:49

标签: blackberry

我有一个VerticalFieldManger用作容器来显示自定义新闻Feed。我们的想法是将图片(BitmapField)和标题(LabelField)放在VerticalFieldManager中。

我为VerticalFieldManager提供了一些简单的自定义元素及其行为的子类,但我没有覆盖VerticalFieldManager中声明的任何方法。

我希望BitmapField响应触摸事件和导航点击,以打开网络浏览器以显示所需的网页。问题是VerticalFieldManager没有获得焦点(我没想到),也没有任何子元素得到关注。

我没有子类化BitmapField和LabelField

我的子类VerticalFieldManager的构造函数:

public NewsManagerView( boolean _isClickable, long _style ) {
    super( _style );

    this.setIsClickable( _isClickable );    // sets flag if this should respond to click events

    this.init();    // initialize ivars

    this.add( this.getTitle() );    // add child fields
    this.add( this.getImgFld() );
    this.add( this.getUrl() );
}

实例化如下:

this.setNewsManager( new NewsManagerView(this.getIsConnected(), Field.USE_ALL_WIDTH) );

2 个答案:

答案 0 :(得分:1)

这是一个已知问题。 我在BB支持论坛上开始了一个主题 http://supportforums.blackberry.com/t5/Java-Development/Scroll-happening-but-Vertical-Field-Manager-Not-Moving/m-p/1214481

给出的答案是 http://supportforums.blackberry.com/t5/Java-Development/My-scrollable-manager-is-not-scrolling/ta-p/445247

很抱歉这不是一个真正的答案,但是目前唯一可用的解决方法

修改 在BB论坛上添加了一篇新帖子:

  

一位朋友给了我解决方案......你可以把你的经理变成一个   水平管理器然后你可以添加一个带有的空字段   可聚焦的行为,这将做到这一点

你可以试试。

答案 1 :(得分:1)

VerticalFieldManager datavfm=new VerticalFieldManager(FOCUSABLE)
{
    protected void paintBackground(Graphics graphics) 
    {
        if(!isFocus())
        {
            graphics.setColor( 0xDDDDDD );
            graphics.fillRoundRect( 0, 0, 318, 30, 18, 18);
            graphics.setColor( 0x000000 );
            graphics.drawRoundRect( 0, 0, 318, 30, 18, 18);
            invalidate();
        }
        else
        {
            graphics.setColor( 0x005DE7 );
            graphics.fillRoundRect( 0, 0, 318, 30, 18, 18);
            graphics.setColor( 0xFFFFFF );
            graphics.drawRoundRect( 0, 0, 318, 30, 18, 18);
            graphics.setColor( 0xFFFFFF );
            invalidate();
        }
    }
    protected void sublayout(int maxWidth,int maxHeight)
    {
        super.sublayout(318, 30);
        super.setExtent(318, 30);
    }
    protected boolean navigationClick(int status,int time)
    {
        GetPNRStatus(strPNRNumber);
        return true;
    }
    protected boolean keyChar(char c, int status, int time)
    {
        if (c == Characters.ENTER)
        {
            GetPNRStatus(strPNRNumber);
        }
        return true;
    }
};