黑莓verticalfieldmanager部分屏幕滚动与标签字段

时间:2013-11-22 15:42:22

标签: blackberry

我正在尝试使用VFM中的一堆LabelField创建一组FAQ问题和答案。问题是,当我尝试滚动时,它会跳到列表的底部,并且不会显示中段问题。

public class HelpTab implements ITabAreaLayout, ScrollChangeListener {

    public String[] GetQandAs() {
        String[] QandAs = new String[22];

        QandAs[0] = "Q. ....";
        QandAs[1] = "A. ....";
        ....
        ....
        QandAs[20] = "Q. ...";
        QandAs[21] = "A. ....";

        return QandAs;
    }

    VerticalFieldManager _vfm;

    public VerticalFieldManager GetLayout() {
        _vfm = new VerticalFieldManager(Field.FIELD_LEFT
                | Manager.VERTICAL_SCROLL | Manager.VERTICAL_SCROLLBAR);

        _vfm.add(UIElements.GetTitleArea(" ? FAQ"));

        String[] QandAs = GetQandAs();

        for (int i = 0; i < QandAs.length; i++) {
            LabelField lblQandA = null;

            if ((i % 2) == 0) {
                lblQandA = UIElements.GetQuestionLabel(QandAs[i]);
            } else {
                lblQandA = UIElements.GetAnswerLabel(QandAs[i]);
            }

            _vfm.add(lblQandA);
        }

        _vfm.add(new NullField(NullField.FOCUSABLE)); // for scrolling

        return _vfm;

    }

    public void scrollChanged(Manager manager, int newHorizontalScroll,
            int newVerticalScroll) {

        if (_vfm != null){
            _vfm.setVerticalScroll(newVerticalScroll);
        }
    }

    public class HomeScreen extends MainScreen 
    {

    public HomeScreen() {

        super(Manager.FIELD_HCENTER | Screen.NO_VERTICAL_SCROLL);

        _vfmMain = new VerticalFieldManager();

        // add header image
        _vfmMain.add(UIElements
                .GetBitmapField(UIElements.IMG_HEADER, false));

        // add tab strip
        _vfmMain.add(MakeTabStrip());

        add(_vfmMain);

        _vfmTabArea = new HelpTab().GetLayout();

        add(_vfmTabArea);


    }
}

我无法在setVerticalScroll使用方面找到太多帮助,也许这就是导致此问题的原因。

请告知。

谢谢

2 个答案:

答案 0 :(得分:1)

在您的代码中,您在循环的结束位置添加了可聚焦的空字段。所以如果滚动,它将转到最后一个元素。如果你将可聚焦字段添加到 - 第一个问题之后,然后在第二个问题之后,.....那么它将逐个滚动。 试试这段代码 -

for (int i = 0; i < QandAs.length; i++) {
    LabelField lblQandA = null;

    if ((i % 2) == 0) {
        lblQandA = UIElements.GetQuestionLabel(QandAs[i]);
    } else {
        lblQandA = UIElements.GetAnswerLabel(QandAs[i]);
    }

    _vfm.add(lblQandA);
    _vfm.add(new NullField(NullField.FOCUSABLE));  //after each element, add a focusable null field.
}

答案 1 :(得分:1)

正如Signare所指出的,这里的问题可能与你的LabelFields无法集中,这些都不是默认的。一个答案是按照建议添加NullFields。但是我怀疑你确实希望这些是可聚焦的,因此用户可以点击他们想要了解更多信息的那个。因此,通过设置样式,使LabelFields可聚焦,例如

LabelField lab = new LabelField("Label", LabelField.FOCUSABLE);

或者,在我看来,最好使用RichTextField而不是LabelField。这将使您逐行滚动,LabelField将重点放在整个文本上。