我正在尝试使用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使用方面找到太多帮助,也许这就是导致此问题的原因。
请告知。
谢谢
答案 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将重点放在整个文本上。