Raza Ali
Raza Ali

Reputation: 595

Blackberry verticalfieldmanager partial screen scrolling with label fields

I am trying to create a set of FAQ questions and answers using a bunch of LabelFields in a VFM. Issue is that when I try to scroll, it jumps to the bottom of the list and doesn't show the mid-section questions.

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);


    }
}

I was not able to find much help on setVerticalScroll usage, maybe that is the reason for this issue.

Please advise.

Thanks

Upvotes: 1

Views: 84

Answers (2)

Peter Strange
Peter Strange

Reputation: 2650

As Signare has pointed out, the issue here is probably related to your LabelFields not being focusable, which are they are not by default. One answer is to add NullFields as has been suggested. However I suspect you actually want these to be focusable, so the user can click on the one they would like more information on. So make your LabelFields Focusable, by setting the style, for example

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

Alternatively, and to my mind preferably, use RichTextField instead of LabelField. This will give you scrolling line by line, LabelField focuses on the whole text.

Upvotes: 1

Rince Thomas
Rince Thomas

Reputation: 4158

In your code, you added the focusable null field at the end position of the loop. so if you scroll, it will goto the last element. If you add the focusable field to- After first question, then after second question, ..... so it will scroll one by one. Try This code -

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.
}

Upvotes: 1

Related Questions