首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使HorizontalFieldManager在BlackBerry中可点击?

如何使HorizontalFieldManager在BlackBerry中可点击?
EN

Stack Overflow用户
提问于 2012-04-06 09:30:11
回答 3查看 984关注 0票数 4

我正在用BlackBerry开发一个应用程序,我有许多HorizontalFieldManager中的组件,如下图所示:

我必须在一个动态填充的HorizontalFieldManager循环中添加许多这样的for。合并在一起时,它看起来就像列表中的一行。到目前为止,我已经做到了这一点。

但问题是,用户应该能够单击类似的“行”。但是由于HorizontalFieldManager不具有可聚焦性或可点击性,而且由于它内有4个组件,而且所有4个组件都是同等重要的,所以我一直无法想出一种方法来做到这一点。

有人能建议我怎么做吗?基本上,用户应该能够单击在图像中显示的“行”。这个“行”由许多组件组成(2 HorizontalFieldManagers、1 VerticalFieldManager、1 BitmapField和3 LabelFields)。

任何帮助都非常感谢!

EN

回答 3

Stack Overflow用户

发布于 2012-04-08 18:45:27

BBdev直接回答了您的问题,但正如您注意到的,性能非常慢。这是因为使用一个管理器来清除这样的数百行,会给UI的布局步骤增加很多开销。布局将针对所有这些管理器运行,每次在屏幕上发生更改时--包括每次添加新行时。这基本上是二次型的。

加快速度的方法是使用ListField代替。ListField的一个痛点是,您必须直接绘图,而不是依赖标准的OS字段。但优点是ListField执行得非常快--每一行都有固定的高度,因此ListField可以快速确定哪些行是可见的,然后只为这些行调用画图代码。

这意味着工作尺度与该字段的可见大小,而不是该字段的虚拟大小。在编写UI代码时,这是一个非常需要维护的属性,因为UI的虚拟深度没有界限,但是物理屏幕有固定数量的像素,因此通过缩放UI中可见部分的工作,可以保持良好的性能。

票数 3
EN

Stack Overflow用户

发布于 2012-04-06 10:21:53

下面的代码将使您的HorizontalFieldManager可点击,并在这个Hfm中添加您想要的组件。

代码语言:javascript
复制
import net.rim.device.api.system.Display;
import net.rim.device.api.ui.Color;
import net.rim.device.api.ui.Field;
import net.rim.device.api.ui.FieldChangeListener;
import net.rim.device.api.ui.Graphics;
import net.rim.device.api.ui.Manager;
import net.rim.device.api.ui.TouchEvent;
import net.rim.device.api.ui.Touchscreen;
import net.rim.device.api.ui.UiApplication;
import net.rim.device.api.ui.component.Dialog;
import net.rim.device.api.ui.component.LabelField;
import net.rim.device.api.ui.component.NullField;
import net.rim.device.api.ui.container.HorizontalFieldManager;
import net.rim.device.api.ui.container.MainScreen;

public class sample extends MainScreen implements FieldChangeListener{

 HorizontalFieldManager logInDetailManager=null;
 int background_color=0;

 public sample() {

logInDetailManager = new HorizontalFieldManager(Manager.USE_ALL_WIDTH|Field.FOCUSABLE){
    protected void sublayout(int maxWidth, int maxHeight) {
            int height=40;
        super.sublayout(Display.getWidth(), height);
        setExtent(Display.getWidth(), height);
    }
    protected void paint(Graphics graphics) {

        graphics.setBackgroundColor(background_color);
        graphics.clear();
        invalidate();
        super.paint(graphics);
    }
    protected void onFocus(int direction) {
        super.onFocus(direction);
        background_color=Color.RED;
        invalidate();
    }
    protected void onUnfocus() {
        invalidate();
        background_color=Color.GREEN;

    }
    protected boolean navigationClick(int status, int time) {

        if(Touchscreen.isSupported()){
            return false;
        }else{
            fieldChangeNotify(1);
            return true;
        }

    }
    protected boolean touchEvent(TouchEvent message)
    {
        if (TouchEvent.CLICK == message.getEvent())
        {
            FieldChangeListener listener = getChangeListener();
            if (null != listener)
                this.setFocus();
                listener.fieldChanged(this, 1);
        }
        return super.touchEvent(message);
    }
};
logInDetailManager.setChangeListener(this);
logInDetailManager.add(new LabelField("hello"));
logInDetailManager.add(new NullField(Field.FOCUSABLE));
add(logInDetailManager);
add(new LabelField("good",Field.FOCUSABLE));    
}

  public void fieldChanged(Field field, int context) {            
if(field==logInDetailManager){                  
    UiApplication.getUiApplication().invokeLater(new Runnable() {                          
        public void run() {                                 
            Dialog.inform("Hi how are you?");                          
        }                    
    });          
}   
}

}

希望这能帮到你。干杯:)

票数 2
EN

Stack Overflow用户

发布于 2013-03-18 14:11:39

当您有一个水平字段数组时,如何处理焦点颜色?

代码语言:javascript
复制
for (int i = 0; i < listSize; i++) {
        logInDetailManager[i] = new HorizontalFieldManager(
                Manager.USE_ALL_WIDTH | Field.FOCUSABLE) {

由于数组的某一项总是有焦点,所以整个列表都是红色的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10041607

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档