我想創建一組常見問題解答並在VFM中使用一堆LabelFields。問題是,當我嘗試滾動時,它跳轉到列表的底部,並沒有顯示中間部分的問題。黑莓verticalfieldmanager部分屏幕滾動與標籤字段
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使用多大的幫助,也許就是這個問題的原因。
請指教。
感謝
除了Peter的建議,我不認爲你正在使用'ScrollChangeListener'。 'scrollChanged()'方法是管理員滾動的通知。你不需要通過調用'setVerticalScroll()'來實現滾動。滾動更改偵聽器旨在允許您在管理器滾動時添加自定義處理。例如,您可以選擇僅在用戶滾動靠近屏幕時才加載屏幕底部的圖像。在你的情況下,我認爲你可以完全移除'scrollChanged()'。焦點問題是分開的。 – Nate
感謝您的解釋。我已經移除了聽衆並使用Signare的解決方案來解決問題。 –