Blackberry 黑莓标签中的列表字段
我有一个带有标签的主屏幕。每个选项卡都有自己的重写navigationClick方法,如下所示Blackberry 黑莓标签中的列表字段,blackberry,java-me,tabs,listfield,Blackberry,Java Me,Tabs,Listfield,我有一个带有标签的主屏幕。每个选项卡都有自己的重写navigationClick方法,如下所示 protected boolean navigationClick(int status, int time) { fieldChangeNotify(1); return true; } public void fieldChanged(Field field, int context) { if (_tabArea != null) { if (field
protected boolean navigationClick(int status, int time) {
fieldChangeNotify(1);
return true;
}
public void fieldChanged(Field field, int context) {
if (_tabArea != null) {
if (field == _tab1) {
delete(_tabArea);
_tabArea = displayTab1();
add(_tabArea);
} else if (field == _tab2) {
delete(_tabArea);
_tabArea = displayTab2();
add(_tabArea);
} else if (field == _tab3) {
delete(_tabArea);
_tabArea = displayTab3();
add(_tabArea);
}
}
}
以及其他方法
public boolean isFocusable() {
return true;
}
protected void drawFocus(Graphics graphics,
boolean on) {
// Don't draw the default focus
}
protected void onFocus(int direction) {
super.onFocus(direction);
invalidate();
}
protected void onUnfocus() {
super.onUnfocus();
invalidate();
}
但是,在我的主屏幕中,horizontalfieldmanager中有3个这样的选项卡。重写的fieldChanged是这样实现的
protected boolean navigationClick(int status, int time) {
fieldChangeNotify(1);
return true;
}
public void fieldChanged(Field field, int context) {
if (_tabArea != null) {
if (field == _tab1) {
delete(_tabArea);
_tabArea = displayTab1();
add(_tabArea);
} else if (field == _tab2) {
delete(_tabArea);
_tabArea = displayTab2();
add(_tabArea);
} else if (field == _tab3) {
delete(_tabArea);
_tabArea = displayTab3();
add(_tabArea);
}
}
}
这将切换选项卡。我在下面有一个navigationClick来处理列表字段上的单击,但是自从我覆盖了navigationClick之后,选项卡切换就不再有效了。有人知道为什么吗
protected boolean navigationClick(int status, int time) {
Field field = _listfield;
if(field instanceof ListField)
{
int selected = _listfield.getSelectedIndex();
switch (selected) {
case 0:
delete(_tabArea);
All all = new All();
_tabArea = all.getVFM();
add(_tabArea);
break;
case 1:
break;
}
return true;
}
return super.navigationClick(status, time);
}
您的覆盖是否在所有情况下都调用super.navigationClick()
根据navigationClick的代码,它看起来像超级。navigationClick()不会被调用,因为
if(field instanceof ListField)
阻止执行到达超级调用。我更改了字段=\u ListField;to Field=this.getFieldWithFocus()。。。现在选项卡可以工作了,但我认为选择列表项不起作用,而不是使用此.getFieldWithFocus()。做一些类似于if(field.isFocus()){///您的代码//}的操作,它可能正在填充,因为当您关注其他字段时,它会触发。